std::unordered_multimap<Key,T,Hash,KeyEqual,Allocator>::erase
從 cppreference.com
< cpp | container | unordered multimap
iterator erase( iterator pos ); |
(1) | (C++11 起) (C++26 起為 constexpr) |
iterator erase( const_iterator pos ); |
(2) | (C++11 起) (C++26 起為 constexpr) |
iterator erase( const_iterator first, const_iterator last ); |
(3) | (C++11 起) (C++26 起為 constexpr) |
size_type erase( const Key& key ); |
(4) | (C++11 起) (C++26 起為 constexpr) |
template< class K > size_type erase( K&& x ); |
(5) | (C++23 起) (C++26 起為 constexpr) |
從容器移除指定的元素。保留未被移除的元素的順序(這使得可能在迭代通過容器時移除單獨的元素)。
1,2) 移除位於 pos 的元素。
3) 移除範圍
[
first,
last)
中的元素,它必須是 *this 中的有效範圍。4) 移除鍵等價於 key 的所有元素。
5) 移除鍵比較等價於值 x 的所有元素。
此重載只有在
Hash
和 KeyEqual
均透明,且 iterator
與 const_iterator
均不可從 K
隱式轉換時才會參與重載決議。這假設使得 Hash
能用 K
和 Key
類型調用,並且 KeyEqual
是透明的,進而允許調用此函數時不需要構造 Key
的實例。指向被擦除元素的引用和迭代器會失效。其他迭代器和引用不會失效。
迭代器 pos 必須合法且可解引用。從而 end() 迭代器(合法,但不可解引用)不能用作 pos 所用的值。
目錄 |
[編輯] 參數
first, last | - | 要移除元素範圍的迭代器對 |
first, last | - | 要移除的元素範圍 |
key | - | 要移除的元素鍵值 |
x | - | 任何能與鍵透明比較的類型的值,指代要移除的元素 |
[編輯] 返回值
1-3) 後隨最後被移除的元素的迭代器。
4) 被移除的元素個數。
5) 被移除的元素個數。
[編輯] 異常
1-3) 不拋出。
4,5) 任何
Hash
與 KeyEqual
對象所拋的異常。[編輯] 複雜度
給定 unordered_multimap
的實例 c:
1,2) 平均情況:常數,最壞情況:unordered_multimap。
4) 平均情況:c.count(key),最壞情況:c.size()。
5) 平均情況:c.count(x),最壞情況:c.size()。
註解
功能特性測試宏 | 值 | 標準 | 功能特性 |
---|---|---|---|
__cpp_lib_associative_heterogeneous_erasure |
202110L |
(C++23) | 關聯容器和無序關聯容器中的異質擦除; 重載 (5) |
[編輯] 示例
運行此代碼
#include <unordered_map> #include <iostream> int main() { std::unordered_multimap<int, std::string> c = { {1, "one" }, {2, "two" }, {3, "three"}, {4, "four"}, {5, "five"}, {6, "six" } }; // 从 c 移除所有奇数 for (auto it = c.begin(); it != c.end(); ) { if (it->first % 2 != 0) it = c.erase(it); else ++it; } for (auto& p : c) std::cout << p.second << ' '; std::cout << '\n'; }
可能的輸出:
two four six
缺陷報告
下列更改行為的缺陷報告追溯地應用於以前出版的 C++ 標準。
缺陷報告 | 應用於 | 出版時的行為 | 正確行為 |
---|---|---|---|
LWG 2059 | C++11 | 重載 (2) 有歧義 | 添加重載 (1) |
LWG 2356 | C++11 | 未被移除的元素不一定會保留順序 | 要求保留 |
[編輯] 參閱
清除內容 (公開成員函數) |