为什么像count和erase这样的unordered_set操作会返回size_type?

时间:2012-08-08 07:00:10

标签: c++ hashset c++-standard-library unordered-set

显然,unordered_set::eraseunordered_set::count返回的内容不是严格的布尔值(逻辑上,也就是说,我不是在谈论实际类型)。

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

size_type erase( const key_type& key );
  

使用键值键

删除元素

这有一个基调,表明可能不只有一个元素与给定的键。它没有明确说明这一点,但听起来很多 现在,集合的一个点,即使是无序集合,也就是让每个元素都有一次。

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

2 个答案:

答案 0 :(得分:6)

  

a.erase(k)size_type用键删除所有元素                       相当于k。返回                      删除的元素数量。

     

b.count(k)size_type返回带键的元素数   相当于k。

这是因为unordered associative container requirements [23.2.5]。

答案 1 :(得分:1)

可能只是为了让他们可以重复使用unordered_multiset中的措辞。您不必担心散列冲突,除了性能方面,即使每个元素发生碰撞,容器仍然是正确的 - 即使这样的事情会非常缓慢。