도순씨의 코딩일지

C++ :: STL map, multimap 컨테이너 본문

𝐏𝐑𝐎𝐆𝐑𝐀𝐌𝐌𝐈𝐍𝐆/𝐂++

C++ :: STL map, multimap 컨테이너

도순씨 2020. 9. 19. 00:00

🌼 map 컨테이너

map 컨테이너는 원소를 key와 value의 쌍으로 저장합니다. 원소의 key는 컨테이너에 중복저장될 수 없습니다. 만약 중복 key를 사용해야 한다면 multimap을 사용하면 됩니다.

 

출처 : http://blog.daum.net/coolprogramming/83

 

다음은 map 컨테이너 생성과 원소 저장을 위한 insert() 함수입니다.

 

⭐️ map의 insert()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
#include <map>
using namespace std;
 
int main(void){
    map<intint> m;
    m.insert(pair<intint>(5100));
    m.insert(pair<intint> (3100));
    m.insert(pair<intint> (830));
    m.insert(pair<intint> (440));
    m.insert(pair<intint> (170));
    m.insert(pair<intint> (7100));
 
    pair<intint> pr(950);
    m.insert(pr);
 
    map<intint> :: iterator iter;
    for(iter = m.begin() ; iter != m.end() ; ++iter)
        cout << "(" << (*iter).first << ',' << (*iter).second << ")" << " ";
    cout << endl;
 
    for(iter = m.begin() ; iter != m.end() ; ++iter)
        cout << "(" << iter->first << ',' << iter->second << ")" << " ";
    cout << endl;
 
    return 0;
 }
cs

 

⭐️ map의 insert() 실행결과

1
2
(1,70) (3,100) (4,40) (5,100) (7,100) (8,30) (9,50) 
(1,70) (3,100) (4,40) (5,100) (7,100) (8,30) (9,50) 
cs

 

다음 예제는 map의 [] 연산자를 사용한 원소의 추가와 value 갱신 예제입니다.

 

⭐️ map의 [] 연산자

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <map>
using namespace std;
int main(void){
    map<intint> m;
    m[5= 100;
    m[3= 100;
    m[8= 30;
    m[4= 40;
    m[1= 70;
    m[7= 100;
    m[9= 50;
    map<intint> :: iterator iter;
    for(iter = m.begin() ; iter != m.end() ; ++iter)
        cout << "(" << iter -> first << ',' << iter -> second << ")" << " ";
    cout << endl;
    m[5= 200;
    for(iter = m.begin(); iter != m.end() ; ++iter)
        cout << "(" << iter->first << ',' << iter->second << ")" << " ";
    cout << endl;
    return 0;
}
cs

 

⭐️ map의 [] 연산자 실행결과

1
2
(1,70) (3,100) (4,40) (5,100) (7,100) (8,30) (9,50) 
(1,70) (3,100) (4,40) (5,200) (7,100) (8,30) (9,50) 
cs

 

다음 예제는 find(), lower_bound(), upper_bound(), equal_range() 사용 예제입니다.

 

⭐️ map의 찾기 관련 멤버 함수

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>
#include <map>
using namespace std;
 
int main(void){
    map<intint> m;
 
    m[5= 100;
    m[3= 100;
    m[8= 30;
    m[4= 40;
    m[1= 70;
    m[7= 100;
    m[9= 50;
 
    map<intint> :: iterator iter;
    for(iter = m.begin() ; iter != m.end() ; ++ iter)
        cout << "(" << iter->first << ',' << iter->second << ")" << " ";
    cout << endl;
 
    iter = m.find(5);
    if(iter != m.end())
        cout << "key 5에 매핑된 value: " << iter -> second << endl;
 
    map<intint> :: iterator lower_iter;
    map<intint> :: iterator upper_iter;
    lower_iter = m.lower_bound(5);
    upper_iter = m.upper_bound(5);
 
    cout << "구간 [lower_iter, upper_iter)의 순차열: ";
    for(iter = lower_iter ; iter != upper_iter ; ++iter)
        cout << "(" << iter->first << ',' << iter->second << ")";
    cout << endl;
 
    pair<map<intint> :: iterator, map<intint>::iterator > iter_pair;
    iter_pair = m.equal_range(5);
 
    cout << "구간 [iter_pair.first, iter_pair.second) 의 순차열: ";
    for(iter = iter_pair.first ; iter != iter_pair.second ; ++iter)
        cout << "(" << iter->first << ',' << iter->second << ") ";
    cout << endl;
    return 0;
}
cs

 

⭐️ map의 찾기 관련 멤버 함수 실행결과

1
2
3
4
(1,70) (3,100) (4,40) (5,100) (7,100) (8,30) (9,50) 
key 5에 매핑된 value: 100
구간 [lower_iter, upper_iter)의 순차열: (5,100)
구간 [iter_pair.first, iter_pair.second) 의 순차열: (5,100) 
cs

 

 

🌼 multimap 컨테이너

multimap 컨테이너는 map 컨테이너와 다르게 중복 원소(key)를 허용합니다.

다음 예제는 count() find() 멤버 함수를 사용하였습니다.

 

⭐️ multimap의 count()와 find()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
#include <map>
using namespace std;
 
int main(){
    multimap<intint> mm;
 
    mm.insert(pair<intint>(5100));
    mm.insert(pair<intint>(3100));
    mm.insert(pair<intint>(830));
    mm.insert(pair<intint>(340));
    mm.insert(pair<intint>(170));
    mm.insert(pair<intint>(7100));
    mm.insert(pair<intint>(850));
 
    multimap<intint> :: iterator iter;
    for(iter = mm.begin() ; iter != mm.end() ; ++iter)
        cout << "(" << iter->first << ',' << iter->second << ")" << " ";
    cout << endl;
 
    cout << "key 3의 원소의 개수는 " << mm.count(3<< endl;
 
    iter = mm.find(3);
    if(iter != mm.end())
        cout << "첫 번째 key 3에 매핑된 value: " << iter->second << endl;
 
    return 0;
}
cs

 

⭐️ multimap의 count()와 find() 실행결과

1
2
3
(1,70) (3,100) (3,40) (5,100) (7,100) (8,30) (8,50) 
key 3의 원소의 개수는 2
첫 번째 key 3에 매핑된 value: 100
cs

 

📚 출처

공동환(2012), 뇌를 자극하는 C++ STL, 한빛미디어.

Comments