map은 unique한 key-value
쌍을 갖는 정렬된 연관 컨테이너이다. key값을 기준으로 정렬을 시키며 key를 넘겨주지 않는다면 그냥 알아서 key값으로 sort를 하게된다.
요즘 파이썬만 사용해서 dictionary 형태로 이용을 하다보니 c++을 이용하여 해시맵 문제를 풀 때 곤욕을 겪었다. 그래서 이번에 간단하게 초기화 방법과 제공되는 함수들을 정리해보려고 한다.
아래를 보고 초기화와 insert를 기억하자.
#include <iostream>
#include <map>
#include <string>
#include <string_view>
void print_map(std::string_view comment, const std::map<std::string, int>& m)
{
std::cout << comment ;
for (const auto& [key, value] : m) {
std::cout << '[' << key << "] = " << value << "; ";
}
std::cout << '\n';
}
int main()
{
// Create a map of three (strings, int) pairs
std::map<std::string, int> m { {"CPU", 10}, {"GPU", 15}, {"RAM", 20}, };
print_map("1) Initial map: ", m);
m["CPU"] = 25; // update an existing value
m["SSD"] = 30; // insert a new value
print_map("2) Updated map: ", m);
// using operator[] with non-existent key always performs an insert
std::cout << "3) m[UPS] = " << m["UPS"] << '\n';
print_map("4) Updated map: ", m);
m.erase("GPU");
print_map("5) After erase: ", m);
std::erase_if(m, [](const auto& pair){ return pair.second > 25; });
print_map("6) After erase: ", m);
std::cout << "7) m.size() = " << m.size() << '\n';
m.clear();
std::cout << std::boolalpha << "8) Map is empty: " << m.empty() << '\n';
}
/*
output
1) Initial map: [CPU] = 10; [GPU] = 15; [RAM] = 20;
2) Updated map: [CPU] = 25; [GPU] = 15; [RAM] = 20; [SSD] = 30;
3) m[UPS] = 0
4) Updated map: [CPU] = 25; [GPU] = 15; [RAM] = 20; [SSD] = 30; [UPS] = 0;
5) After erase: [CPU] = 25; [RAM] = 20; [SSD] = 30; [UPS] = 0;
6) After erase: [CPU] = 25; [RAM] = 20; [UPS] = 0;
7) m.size() = 3
8) Map is empty: true
*/