【问题标题】:Why `std::unordered_map::erase(key_type const&)` return number of removed elements?为什么`std::unordered_map::erase(key_type const&)`返回删除元素的数量?
【发布时间】:2021-02-08 18:23:19
【问题描述】:

最近去使用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),表示我们可以拥有已移除元素的数量。这是否意味着地图上可以有相同的键?

【问题讨论】:

标签: c++ unordered-map


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-05
    • 1970-01-01
    相关资源
    最近更新 更多