[C++STL] 연관 컨테이너 - map

박남호·2022년 12월 8일

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;
}
profile
NamoPark

0개의 댓글