key와 value형태로 이루어져 있고 레드-블랙트리라는 구조를 내장
"뉴진스" : attention, "아이브" : afterLike
map을 순회할 때는 key값을 first, value값은 second로 탐색이 가능
정렬을 보장 x
정렬을 보장
map<string, int>
map의 find 메소드는 찾지 못하면 end() 이터레이터를 반환
map<string, int> m1;
m1.insert({"뉴진스", 1});
m1["아이브"] = 2;
// map의 find 메소드는 찾지 못하면 end() 이터레이터를 반환
auto search = m1.find("뉴진스");
if (search != m1.end())
{
cout << "찾음";
}
map의 경우 해당 인덱스에 참조만 해도 맵에값이생기며맵의요소가생기게된다. int형 같은 경우 0으로. string 같은 경우 빈문자열로 들어감.
int main()
{
map<int, int> mp;
map<string, string> mp2;
//참조 전
cout << mp[1] << "\n";
cout << mp2["aaa"] << "\n";
/*출력
0
(빈문자열)
*/
//참조 후
for (auto i : mp)
cout << i.first << " " << i.second << "\n";
for (auto i : mp2)
cout << i.first << " " << i.second << "\n";
}
/*출력
1 0
aaa (빈문자열)
mp[1]을 이전에 참조했기 때문에 mp[1]에 0이라는 값이 생겼고
aaa mp2["aaa"]를 이전에 참조했기 때문에 mp2["aaa"]에 빈문자열이 생겼다
}
*/
이를 활용해서 “맵에 요소가 있는지 없는지"를 확인하고 맵에 데이터를 할당하는 부분의 로직을 짤 수 있다.
int main()
{
map<int, int> mp;
map<string, string> mp2;
if (mp[1] == 0)
{
mp[1] = 2;
}
for (auto i : mp)
cout << i.first << " " << i.second << "\n";
}