公有成員函式
<unordered_set>

std::unordered_set::erase

按位置 (1)
iterator erase ( const_iterator position );
按鍵值 (2)
size_type erase ( const key_type& k );
按範圍 (3)
iterator erase ( const_iterator first, const_iterator last );
刪除元素
unordered_set 容器中移除單個元素或一個範圍的元素([first,last)).

這會有效地將容器的 size 減少被移除元素的數量,並呼叫每個元素的解構函式。

引數

position
指向要從 unordered_set 中移除的單個元素的迭代器。
成員型別const_iterator是一個 forward iterator 型別。
k
要刪除的元素的值。
成員型別key_type是容器中元素的型別。在 unordered_set 容器中,它與value_type相同,定義為類模板引數的別名().
first, last
unordered_set 容器中要移除的元素範圍的迭代器[first,last)即,範圍包括 first 指向的元素以及它之前的所有元素,但不包括 last 指向的元素。
請注意,unordered_set 容器不遵循任何特定的順序來組織其元素,因此範圍刪除的效果可能不容易預測。
成員型別const_iterator是一個 forward iterator 型別。

返回值

版本 (1) 和 (3) 返回一個指向被刪除元素最後一個元素之後位置的迭代器。
版本 (2) 返回被刪除的元素數量,在 unordered_set 容器中(其值是唯一的),這1如果存在一個值為 k 的元素(並因此被刪除),否則為零。

成員型別iterator是一個 forward iterator 型別。
成員型別size_type是一種無符號整型型別。

unordered_set 中的所有迭代器都具有對元素的 const 訪問許可權:元素可以被插入或刪除,但不能在容器中被修改。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// unordered_set::erase
#include <iostream>
#include <string>
#include <unordered_set>

int main ()
{
  std::unordered_set<std::string> myset =
  {"USA","Canada","France","UK","Japan","Germany","Italy"};

  myset.erase ( myset.begin() );                    // erasing by iterator
  myset.erase ( "France" );                         // erasing by key
  myset.erase ( myset.find("Japan"), myset.end() ); // erasing by range

  std::cout << "myset contains:";
  for ( const std::string& x: myset ) std::cout << " " << x;
  std::cout << std::endl;

  return 0;
}
可能的輸出
myset contains: Canada USA Italy


複雜度

平均情況:與被移除的元素數量成線性關係(對於版本 (1)(2) 來說是常數)。
最壞情況:與容器 size 成線性關係。

迭代器有效性

只有被移除元素的迭代器和引用會被失效。
其餘元素不受影響。
只有被移除元素的迭代器和引用會被失效。
其餘元素不受影響。
操作未移除的元素的迭代順序被保留。

另見