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
广告