음악, 삶, 개발
std::map 과 std::multimap 본문
std::map 은 key 와 value 로 이루어진 container 이다.
std::map 은 key 가 unique 해야하지만,
std::multimap 은 동일한 key 를 여러 객체에 중복하여 사용할수있다.
이외에는 사용법이 동일하여 std::map 으로 일단 설명하겠다.
<map> 을 추가하기
std::map 또는 std::multimap 을 사용하기위해서는 #include <map> 을 코드에 추가해야한다.
따로 #include <multimap> 은 없다는것을 기억하자.
#include <map>
map 생성하기
std::map<double, int> m; // key : double, value : int
map 객체를 생성하기위해서는 <key, value> 를 명시해야한다.
위의 코드에서 key 는 double, value 는 int 이다.
map 에 요소를 추가하기 : emplace
map 도 vector 처럼 많은 함수가 있지만, 쉬운것부터 하나씩 알아가도록 하자.
emplace(key, value) 를 사용하여 map 에 객체를 추가할수있다.
std::map<double, int> m;
m.emplace(0.5, 100); // key 0.5 의 값은 100
m.emplace(0.2, 20); // key 0.2 의 값은 20
m.emplace(0.37, 40); // key 0.37 의 값은 40
Range Based For 루프 사용하기
std::map<double, int> m;
for (const auto& p : m) {
std::cout << p.first << " " << p.second << std::endl;
}
Range Based For 루프를 사용하면
위의 p 값은 std::pair type 의 객체이다.
p 뒤에 .first 를 붙이면 key
p 뒤에 .second 를 붙이면 value 를 가져올수있다.
자동으로 sort 되는 항상 정렬되어있는 map
vector 에서는 std::sort() 가 있지만 매우 비싸다고한다.
map 의 강점은 내가 따로 무언가를 하지않아도 요소를 추가할때마다 자동으로 요소들이 sort 되는것이다.
따라서, sort 가 항상 일어나야하는 객체라면 vector 보다 map 을 사용하는것이 옳다.
위의 코드에서 나는 0.5, 0.2, 0.37 순서로 요소를 emplace 하였지만,
실제 출력해보면 key 가 sort 되어 0.2, 0.37 0.5 로 출력되는것을 볼수있다.
중복된 key 를 사용한 multimap 요소들의 순서는?
중복된 key 를 사용하여, 요소를 삽입하면 이들의 순서는 어떻게 될까?
이때는 삽입된 순서를 따라 정렬된다.
< 참고자료 >
[C++] multimap container 정리 및 사용법
insert vs emplace vs operator[] in c++ map