C++ unordered_set::erase() 函式



C++ 的std::unordered_set::erase()函式用於從 unordered_set 容器中刪除指定的元素,可以是單個元素或一系列元素。

此函式有 3 個多型變體:使用基於位置/迭代器的刪除、基於範圍的刪除和基於鍵的刪除(您可以在下面找到所有變體的語法)。

語法

以下是 std::unordered_set::erase() 函式的語法。

iterator erase ( const_iterator position );
or
size_type erase ( const key_type& k );
or
iterator erase ( const_iterator first, const_iterator last );

引數

  • position - 指示指向要刪除的單個元素的迭代器。
  • k - 指示要刪除的元素的值。
  • (first, last) - 指定 unordered_set 中的一個範圍。

返回值

該函式返回成員型別迭代器,它是一種前向迭代器型別。

示例 1

考慮以下示例,我們將演示 unordered_set::erase() 函式的使用。

#include <iostream>
#include <string>
#include <unordered_set>
using namespace std;

int main () {
   unordered_set<string> uSet = {"USA","Canada","France","UK","Japan","Germany","Italy"};
   uSet.erase ( uSet.begin() );                  
   uSet.erase ( "France" );                       
   uSet.erase ( uSet.find("Japan"), uSet.end() ); 

   cout << "uSet contains:";
   for ( const string& x: uSet ) cout << " " << x;
      cout << endl;
   return 0;
}

輸出

讓我們編譯並執行以上程式,這將產生以下結果 -

uSet contains: Germany

示例 2

讓我們看看下面的例子,我們將使用 erase() 函式從容器中刪除奇數元素。

#include <unordered_set>
#include <iostream>
using namespace std;

int main() {
   unordered_set<int> uSet = {10, 11, 12, 15, 17, 18};
 
   cout << "After erasing all odd numbers: ";
   for (auto it = uSet.begin(); it != uSet.end();) {
      if (*it % 2 != 0)
         it = uSet.erase(it);
      else
         ++it;
   }
    
   cout<<"{ ";
      for(auto elem: uSet){
         cout<<elem<<" ";
      }
   cout<<"}";
 
   return 0;
}

輸出

如果我們執行以上程式碼,它將生成以下輸出 -

After erasing all odd numbers: { 18 12 10 }

示例 3

在下面的例子中,我們將使用 erase() 函式刪除指定的元素。

#include <iostream>
#include <string>
#include <unordered_set>
using namespace std;

int main () {
   unordered_set<int> uSet = {10, 20, 30, 40, 50};
   uSet.erase ( 30 );   
   uSet.erase ( 40 ); 

   cout << "uSet contains:";
   for ( auto it: uSet )
      cout << " " << it;
   cout << endl;
   return 0;
}

輸出

以下是以上程式碼的輸出 -

uSet contains: 50 20 10

示例 4

以下是示例,我們將刪除範圍內的元素。

#include <iostream>
#include <string>
#include <unordered_set>
using namespace std;

int main () {
   unordered_set<char> uSet = {'a', 'b', 'c', 'd', 'e'};
   cout <<"uSet contains:";
   for ( auto it: uSet )
      cout <<" " <<it;
   cout <<endl;
   
   uSet.erase ( uSet.begin(), uSet.find('c') ); 
   
   cout <<"after erased uSet contains:";
   for ( auto it: uSet )
      cout <<" " <<it;
   cout <<endl;
   return 0;
}

輸出

以上程式碼的輸出如下 -

uSet contains: e d c b a
after erased uSet contains: c b a
廣告