为什么计数和擦除等unordered_set操作会返回size_type

Why do unordered_set operations like count and erase return a size_type?

本文关键字:操作 set 返回 type size unordered 擦除 为什么      更新时间:2023-10-16

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

链接的页面显示擦除的第三个版本:

size_type erase( const key_type& key );

删除具有键值键的元素

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

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

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

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

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

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