为啥`std::unordered_map::erase(key_type const&)`返回删除元素的数量?
Posted
技术标签:
【中文标题】为啥`std::unordered_map::erase(key_type const&)`返回删除元素的数量?【英文标题】: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),表示我们可以拥有已移除元素的数量。这是否意味着地图上可以有相同的键?
【问题讨论】:
另见:en.cppreference.com/w/cpp/container/unordered_multimap/erase @MooingDuck 一个多图肯定可以有多个等效键。 确实(和这个问题的答案有关) @Ghasem Ramezani 表示有 unordered_multimap 有类似的功能。所以他们的行为是相同的。 【参考方案1】:因为还有unordered_multimap
,其中几个元素可以有相同的键。返回已擦除元素的数量对于 multimap、multiset、unordered_multimap 和 unordered_multiset 非常有意义。为非多容器返回元素数量而不仅仅是 bool
是一种使地图和多地图(等)的公共“界面”尽可能接近的方法,以便在某些情况下两者都可以通过模板参数使用。
擦除非多重映射或集合(或 unordered_map 或 unordered_set)确实只会返回 0 或 1。
【讨论】:
以上是关于为啥`std::unordered_map::erase(key_type const&)`返回删除元素的数量?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 DataGridView 上的 DoubleBuffered 属性默认为 false,为啥它受到保护?