map 컨테이너는 연관 컨테이너중 자주 사용하는 컨테이너로 원소를 key와 value의 쌍으로 저장한다. set은 원소로 key 하나만을 저장하지만, map은 원소로 key와 value의 쌍(pair 객체)을 저장한다. key는 중복 저장될 수 없으며 중복 key를 저장해야 한다면 multimap을 사용해야한다. map은 set처럼 컨테이너에 원소를 삽입하는 유일한 멤버 함수 insert()를 제공하며 정렬 기준은 less이다. 아래는 map 컨테이너의 예제이다.
#include <iostream>
#include <map>
using namespace std;
int main()
{
map<int, int> m;
m.insert(pair<int, int>(5, 100));
m.insert(pair<int, int>(3, 100));
m.insert(pair<int, int>(8, 30));
m.insert(pair<int, int>(4, 40));
m.insert(pair<int, int>(1, 70));
m.insert(pair<int, int>(7, 30));
pair<int, int> pr(9, 50);
m.insert(pr);
m[11] = 100;
cout << m[11] << endl;
m[11] = 200;
cout << m[11] << endl;
map<int, int>::iterator iter;
for (iter = m.begin(); iter != m.end(); ++iter)
{
cout << "key : " << iter->first << " " << "value : " << iter->second << endl;
}
return 0;
}
insert() 멤버 함수는 삽입 성공 여부를 bool 값으로 반환한다. 만약 위 코드에서 b = m.insert(pair<int, int>(2, 90))을 추가 한다면 b는 true, b = m.insert(pair<int, int>(8, 90))을 추가한다면 b는 false의 값을 가지게 된다.
map은 [] 연산자를 사용하여 쉽게 원소(key,value)를 추가하거나 value 값을 갱신할 수 있다.
m[11] = 100 : m에 key 5가 없으므로 원소(key : 5, value : 100)를 m에 추가한다.
m[11] = 200 : m에 key 5가 있으므로 value 100을 200으로 갱신한다.
map의 기본 정렬 기준은 less인데 세 번째 인자를 이용해서 변경할 수 있다.
ex) map< int, string, greater< int > > m;
아래는 멤버함수 find()의 사용 예제이다. lower_bound(), upper_bound(), equal_range()는 map에서는 사용의 의미를 모르겠어서 생략한다.
#include <iostream>
#include <map>
using namespace std;
int main()
{
map<int, int> m;
m.insert(pair<int, int>(5, 100));
m.insert(pair<int, int>(3, 100));
m.insert(pair<int, int>(8, 30));
m.insert(pair<int, int>(4, 40));
m.insert(pair<int, int>(1, 70));
m.insert(pair<int, int>(7, 30));
map<int, int>::iterator iter;
for (iter = m.begin(); iter != m.end(); ++iter)
{
cout << "key : " << iter->first << " " << "value : " << iter->second << endl;
}
iter = m.find(5);
if (iter != m.end())
{
cout << "key 5에 매핑된 value :" << iter->second << endl;
}
map<int, int>::iterator lower_iter;
map<int, int>::iterator upper_iter;
return 0;
}