c++ - 为什么 `std::unordered_map::erase(key_type const&)` 返回已移除元素的数量?

标签 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)

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

Return value
1-2) Iterator following the last removed element.
3) Number of elements removed.

最后一个 (3),表示我们可以拥有已移除元素的数量。这是否意味着 map 上可以有相同的键?

最佳答案

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

关于c++ - 为什么 `std::unordered_map::erase(key_type const&)` 返回已移除元素的数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66107226/

相关文章:

c++ - 如何从一组派生类创建一个列表?

c++ - FindBLAS 和 FindLAPACK 在 CMake 中的使用

python - ld : library not found for -lboost_python on MacOS

c++ - 当 unordered_map 中不存在键时返回零

c++ - 将对象从一个 unordered_map move 到另一个容器

c++ - 如何使用 boost::asio 发送原始二进制数据

c++ - C++中的模块编程

c++ - unordered_map (A)构造函数,(B)删除分配,(C)继承自

C++ unordered_map 与 uint8_t

c++ - 以自定义类为键的 Unordered_map