5

显然,unordered_set::eraseunordered_set::count返回一些不是严格布尔值的东西(从逻辑上讲,我不是在谈论实际类型)。

链接页面读取第三版擦除:

size_type erase( const key_type& key );

删除具有键值键的元素

这有一种语气,表明给定键的元素可能不止一个。它没有明确说明这一点,但听起来很像。
现在,集合的要点,即使是无序的集合,也是每个元素都有一次。

标准库承认该bool类型的存在并将其用于布尔值,如unordered_set::empty(). 那么,size_type在上述情况下,返回有什么意义呢?即使存在哈希冲突,容器也应该区分具有不同键的元素,对吧?我还能依靠吗?

4

2 回答 2

6

a.erase(k) size_type 擦除所有键等于 k ​​的元素。返回已擦除的元素数。

b.count(k) size_type 返回键等于 k ​​的元素的数量。

这是因为无序的关联容器要求[23.2.5]。

于 2012-08-08T07:08:38.480 回答
1

这可能只是为了让他们可以重新使用unordered_multiset. 除了性能方面,您不必担心哈希冲突,即使每个元素都发生冲突,容器仍然是正确的——即使这样的事情会非常慢。

于 2012-08-08T07:08:24.127 回答