MAP : 연관 컨테이너, 노드 컨테이너
- Set에 key와 더불러 value의 쌍으로 저장한다. (key,value)
- Set처럼 중복된 key를 중복해서 저장 할수가 없다, 할라면 mutilMap를 사용해야 한다.
- []연산자를 통해서, 추가 또는 갱신이 가능하다
* map <키,값> m; 은 * m[키] = 값;
- 연관컨테이너 에서 찾기 관련 멤버 함수는 key룰 찾을 때 == 를 사용하지 않음
- 컨테이너의 정렬 기준 조건자를 이용해 찾기 연산을 수행한다.
insert()
- set처럼 저장위치(iter)와 삽입성공여부(bool)을 반환한다.
std::map<int,float> myHouse;
auto result = myHouse.insert(std::make_pair(3,3.3f)); //TRUE
myitor = myHouse.insert(std::make_pair(2,2.2f)); //TRUE
result = myHouse.insert(std::make_pair(1,1.1f)); //TRUE
result = myHouse.insert(std::make_pair(3,5.5f)); //FALSE 이미 있는 값으로 안들어간다.
MutilSET : 연관 컨테이너, 노드 컨테이너
- Map과 달리 중복된 값(key)이 삽입된다. 키는 상관 없음
- 중복 저장될 수 있기 떄문에, set같이 bool값을 반환하는 pair객체가 아닌, 저장된 위치만을 가리키는 반복자를 반환한다.
- [] 연산자를 제공하지 않는다.
순회 샘플
std::multimap<int, int> mm;
std::multimap<int, int>::iterator mmitor;
mm.insert(std::pair<int, int>(60, 6));
mm.insert(std::pair<int, int>(30, 3));
mm.insert(std::pair<int, int>(70, 7));
mm.insert(std::pair<int, int>(90, 9));
mm.insert(std::pair<int, int>(40, 4));
mm.insert(std::pair<int, int>(20, 2));
mm.insert(std::pair<int, int>(50, 5));
mm.insert(std::pair<int, int>(80, 8));
for (mmitor = mm.begin(); mmitor != mm.end(); mmitor++)
{
cout << mmitor->first <<", " << mmitor->second << endl; //키 20부터 ~80 , 값 2~8
}
lower_bound(), upper_bound(), equal_range()
- 중복 키를 검색 할수 있는 함수
- 연관컨테이너는 모두 사용 가능
- equal_range() 앞 lower_bound(), 뒤는 upper_bound()
샘플
std::multimap<int, int> mm;
std::multimap<int, int>::iterator mmitor;
mm.insert(std::pair<int, int>(60, 6));
mm.insert(std::pair<int, int>(30, 3));
mm.insert(std::pair<int, int>(70, 7));
mm.insert(std::pair<int, int>(90, 9));
mm.insert(std::pair<int, int>(40, 4));
mm.insert(std::pair<int, int>(30, 2));
mm.insert(std::pair<int, int>(50, 5));
mm.insert(std::pair<int, int>(80, 8));
auto itorequal = mm.equal_range(30); //30,3 40,4 로 들어감
auto low =mm.lower_bound(30); // low bound는 30,3
auto upp =mm.upper_bound(30); // upper_bound 는 40,4
for (mmitor = itorequal.first; mmitor != itorequal.second; mmitor++) //위 범위를 순위해서 출력하는 것
{
cout << mmitor->first << ", " << mmitor->second << endl; // (30,3) , (30,2) 출력
}