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

박남호·2022년 12월 8일
0

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개의 댓글