map에서 키가 존재하는지 확인하는 방법은 3가지가 있다.
첫 번째 방법은 [] 연산자를 사용하는 것이다.
#include <iostream>
#include <map>
using namespace std;
void main()
{
map<string, int> mp;
if (mp["Key"] == 0)
cout << "Found " << mp["Key"] << endl;
cout << "Map size: " << mp.size();
}
이 방법의 문제점은 2가지다.
- [] 연산자를 통해 접근하는 것만으로도 해당 자료형의 기본값으로 초기화가 진행되어 버린다.
그래서 크기가 증가한다. - 자동으로 할당된 기본값과 의도적으로 할당한 기본값을 구분할 수 없다.
Found 0
Map size: 1
두 번째 방법은 map.at() 함수를 사용하는 것이다.
#include <iostream>
#include <map>
using namespace std;
void main()
{
map<string, int> mp;
if (mp.at("Key") == 0)
cout << "Found " << mp["Key"] << endl;
cout << "Map size: " << mp.size();
}
이 방법의 문제점은 키가 존재하지 않으면, out_of_range 예외를 발생시켜 버린다는 것이다.
terminate called after throwing an instance of 'std::out_of_range'
what(): map::at
마지막 방법은 map.find() 함수를 사용하는 것이다.
#include <iostream>
#include <map>
using namespace std;
void main()
{
map<string, int> mp;
if (mp.find("Key") != mp.end())
cout << "Found " << mp["Key"] << endl;
cout << "Map size: " << mp.size();
}
기본값 초기화나 예외 발생 없이 가장 안전하게 사용할 수 있는 방법이다.
Map size: 0
'자료구조 & 알고리즘 > 기타' 카테고리의 다른 글
우선순위 큐 사용시 비교기 정의가 기억나지 않을 때 (0) | 2023.07.25 |
---|---|
탐색 시 범위 검사를 좀 더 간단하게 하는 방법 (0) | 2023.07.10 |
1차원 벡터를 2차원 벡터로 변환 (0) | 2023.05.26 |
합집합, 교집합, 차집합 (0) | 2023.05.11 |
unique(), remove() 함수 주의사항 (0) | 2023.05.07 |