2012-08-08 5 views
4

외관상으로는, unordered_set::eraseunordered_set::count은 엄밀히 말하면 boolean이 아닌 것을 반환합니다 (논리적으로 말하면, 나는 실제 타입에 대해 말하는 것이 아닙니다).count 및 erase와 같은 unordered_set 연산이 size_type을 반환하는 이유는 무엇입니까?

링크 된 페이지는 삭제의 세 번째 버전을 읽

size_type erase(const key_type& key); 

이것은있을 수 제안 그것에 톤을 가지고

키 키 값을 가진 요소를 제거 더 주어진 키를 가진 하나의 요소보다 이것은 명시 적으로 언급하지는 않지만 많이 들리는 것 같습니다.
집합의 점은 순서가 지정되지 않은 집합이라도 각 요소를 한 번만 가지는 것입니다.

표준 라이브러리는 bool 유형의 존재를 확인하고 unordered_set::empty()과 같은 부울 값에 사용합니다. 그렇다면 위의 경우에 size_type을 반환하는 이유는 무엇입니까? 해시 충돌에도 불구하고 컨테이너는 다른 키를 가진 요소를 구별해야합니다. 맞습니까? 나는 아직도 그것에 의지 할 수 있습니까?

답변

6

a.erase (k) size_type k와 동일한 키 을 포함한 모든 요소를 ​​지 웁니다. 지워진 요소 수인 을 반환합니다.

b.count (k) size_type k에 해당하는 키가 인 요소의 수를 반환합니다.

unordered associative container requirements [23.2.5] 때문입니다.

+1

이 견적의 출처를 링크하면 도움이 될 것입니다. – bitmask

+0

@bitmask가 편집되었습니다. – ForEveR

+1

감사. 작은 편이 선택 : 그 부분은 {멀티} {집합,지도}만을 참조하는 것 같습니다. 순서가없는 대응 물은 23.2.5에있다. – bitmask

1

아마도 그들은 unordered_multiset의 문구를 다시 사용할 수 있습니다. 성능상의 문제를 제외하고는 해시 충돌에 대해 걱정할 필요가 없습니다. 모든 요소가 충돌하더라도 컨테이너는 여전히 정확합니다. 그런 일이 엄청나게 느릴지라도.

+0

비록 많이 기대했지만, 아직도 듣기가 편안합니다. – bitmask