음악, 삶, 개발

std::map 과 std::multimap 본문

개발 공부/C++ 약점공략

std::map 과 std::multimap

Lee_____ 2020. 10. 21. 00:54

std::mapkey value 로 이루어진 container 이다.

std::mapkey 가 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 을 사용하는것이 옳다.

 

자동으로 sort 해주는 map

위의 코드에서 나는 0.5, 0.2, 0.37 순서로 요소를 emplace 하였지만,

실제 출력해보면 key 가 sort 되어 0.2, 0.37 0.5 로 출력되는것을 볼수있다.


중복된 key 를 사용한 multimap 요소들의 순서는?

 

중복된 key 를 사용하여, 요소를 삽입하면 이들의 순서는 어떻게 될까?

 

이때는 삽입된 순서를 따라 정렬된다.


< 참고자료 >

 

cppreference - std::multimap

cppreference - std::pair

[C++] multimap container 정리 및 사용법

insert vs emplace vs operator[] in c++ map