Map은 보통 중복된 값을 허용하지 않는다.
그러나 중복된 값을 허용하면서 동시에 Map을 이용하고 싶을 때에는 STL의 Multimap을 사용하면 된다.
multimap에 대한 자세한 내용은 아래 링크를 참조!
https://blockdmask.tistory.com/88
[C++] multimap container 정리 및 사용법
안녕하세요, BlockDMask 입니다.오늘은 연관 컨테이너(Associative container) 중 multimap 에 대해서 알아보도록 하겠습니다.multimap은 map과 거의 동일하지만 딱 한부분 만 다릅니다.key값이 중복 가능하다.map
blockdmask.tistory.com
숙지하지 못한 map의 사용법
1. map은 무조건 key값으로만 조회를 한다.
-> 백준을 풀다가 map에 인덱스를 이용하여 접근하지는 못할까? 라는 생각에 이리저리 시도를 해 본 결과, 불가능하다는 결론에 도달하였다. map은 불가피하게 key값으로만 접근이 가능하다.
#include <iostream>
#include <string>
#include <map>
using namespace std;
int main() {
map<string, int> m;
m["김철수"] = 15; // key값을 배열의 인덱스 형태로 해서 접근 가능.
m["김영희"] = 23;
cout << "철수의 나이: " << m["김철수"] << endl;
cout << "영희의 나이: " << m["김영희"] << endl;
return 0; }
2. map<key,value>::iterator라는 반복 연산자를 사용하여 순차적인 접근만 가능하다.
-> key값으로 map에 접근하려고 하는 것이 아닌 이상, map에 접근할 수 있는 방법은 for문과 함께 반복 연산자(iterator)을 사용하는 것이다.
그러나 iterator 사용법으로 조심해야 할 것이 있다.
ex) map<int,int > :: iterator it = map.find("apple");
cout << it->second<<endl; // NO PROBLEM;
cout << (it + 1)->second << endl; // FAILE!!
-> iterator는 for문의 증감식 이외의 곳에서는 포인터 연산을 허용하지 않는다.
for( it = map.begin() ; it != map.end(); it++)
포인터 연산을 허락하더라도 it += 1, it += 2와 같은 연산은 허용하지 않고, 오오로지 it++만 허용을 한다.
'프로그래밍 언어 (プログラミング言語) > C && C++' 카테고리의 다른 글
C++ - Stack(STL) (0) | 2023.01.11 |
---|---|
C++에서 문자열을 Parsing하는 다양한 방법 (0) | 2023.01.11 |
STL lower_bound() upper_bound() (0) | 2022.12.18 |
STL Binary Search function (0) | 2022.12.18 |
(ordered) Map vs Unordered Map (0) | 2022.12.18 |