为什么 `std::unordered_map::erase(key_type const&)` 返回删除元素的数量?

Gha*_*ani 3 c++ unordered-map

最近去用了std::unordered_map::erase,看到函数有一些重载:

iterator erase( const_iterator pos );                         (1)  (since C++11)
iterator erase( iterator pos );                               (1)  (since C++17)
iterator erase( const_iterator first, const_iterator last );  (2)  (since C++11)
size_type erase( const key_type& key );                       (3)  (since C++11)
Run Code Online (Sandbox Code Playgroud)

在提到的函数返回值的描述中:

Return value
1-2) Iterator following the last removed element.
3) Number of elements removed.
Run Code Online (Sandbox Code Playgroud)

最后一个 (3),表示我们可以删除元素的数量。这是否意味着可以在地图上使用相同的键?

Arm*_*yan 7

因为也unordered_multimap有几个元素可以具有相同键的地方。返回已擦除元素的数量对于 multimap、multiset、unordered_multimap 和 unordered_multiset 非常有意义。返回元素数量而不是仅bool用于非多容器是一种使 map 和 multimap (etc) 的公共“接口”尽可能彼此接近的方法,以便在某些情况下可以通过模板参数。擦除非多映射或集合(或 unordered_map 或 unordered_set)确实只会返回 0 或 1。