답변:
사용 my_map.count( key )
; 기본적으로 원하는 부울 결과 인 0 또는 1 만 반환 할 수 있습니다.
교대로 my_map.find( key ) != my_map.end()
작동합니다.
map::count
로 구현됩니다 find(__x) == end() ? 0 : 1;
. 들어 multimap
당신은 성능 인수가있을 수 있습니다,하지만 영업 이익의 문제가 아닙니다 그리고 난 아직도 우아함을 선호합니다.
has(k)
/ 추가해야합니다 contains(k)
. 인터페이스 디자인이 불량합니다. find () 접근 방식이 너무 장황하며 그 count(k)
접근 방식이의 의미 론적 패리티가 아닙니다 has(k)
. 그 문제에 대해서도 마찬가지입니다 find(k)
. 이 질문에 대한 조회수를 확인하십시오.
Potatoswatter의 대답은 괜찮지 만 대신 find
또는 을 사용하는 것을 선호합니다 lower_bound
. lower_bound
동일한 키로 무언가를 삽입하려는 경우 반환 된 반복자가 힌트 삽입에 사용될 수 있기 때문에 특히 유용합니다.
map<K, V>::iterator iter(my_map.lower_bound(key));
if (iter == my_map.end() || key < iter->first) { // not found
// ...
my_map.insert(iter, make_pair(key, value)); // hinted insertion
} else {
// ... use iter->second here
}
value
삽입이 불필요하다면 계산을 건너 뛸 수 있다는 것이다.
lower_bound
기반 솔루션이 과도 하다는 것을 알고 있습니다. 나는 "완전성을위한"내 대답을 언급했습니다. 내가 말했듯이, 당신은 완벽하게 충분합니다. :-)
insert
선험 의 대안과의 관계를 지적하십시오 . 실제로,를 사용하는 경우 다른 방법 이 있습니다 multimap
.이 lower_bound
방법은 등가 범위의 시작 부분에 삽입하지만 일반 insert
방법은 범위의 끝에 추가합니다.
디 사이 드라 텀 map.contains(key)
은 표준 C ++ 2a 초안으로 예약되어 있습니다. 2017 년에는 gcc 9.2에 의해 구현되었습니다 . 또한 현재 clang에 있습니다.