在C++ STL中的multiset erase()

在C++ STL中的multiset erase()

multisetC++ STL库中的一个关联容器,它可以保存多个具有相同键值的元素。这个容器与set非常相似,唯一的差别是可以保存多个相同的元素。

multiset定义在头文件<set>中,我们可以使用erase()函数来删除其中的元素。下面是erase()函数的语法:

iterator erase (const_iterator position);
size_type erase (const value_type& val);
iterator erase (const_iterator first, const_iterator last);

第一个函数erase(const_iterator position)可以删除multiset中的指定元素,第二个函数erase(const value_type& val)可以删除与指定值相等的所有元素,第三个函数erase可以删除指定范围内的元素。

我们来看一个示例如下:

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

int main() {
   multiset<int> myset = {1,2,3,2,4,3,5,7,2};

   // 使用erase(const_iterator position)删除元素
   myset.erase(myset.find(2));
   for (auto it = myset.begin(); it != myset.end(); ++it) {
      cout << *it << " "; // 输出1 2 3 3 4 5 7
   }

   cout << endl;

   // 使用erase(const value_type& val)删除元素,删除所有等于3的元素
   myset.erase(3);
   for (auto it = myset.begin(); it != myset.end(); ++it) {
      cout << *it << " "; // 输出1 2 4 5 7
   }

   cout << endl;

   // 使用erase(const_iterator first, const_iterator last)删除元素
   auto start = myset.find(2);
   auto end = myset.find(5);
   myset.erase(start, end);
   for (auto it = myset.begin(); it != myset.end(); ++it) {
      cout << *it << " "; // 输出1 4 7
   }
   return 0;
}

上面的示例中,我们可以看到如何使用erase()函数删除元素。第一个erase()函数使用了find()函数来获得指向要删除元素的迭代器,但它只删除了第一个我们需要的元素。第二个erase()函数删除了所有值等于3的元素。第三个erase()函数删除了第二个和第五个元素之间的所有元素。

需要注意的是,如果要从multiset中删除元素,最好使用find()函数来获取指向要删除元素的迭代器。

结论

multiset中的erase()函数可以用来删除元素。它有三种不同的形式,可以删除指定元素,也可以删除与指定值相等的所有元素,还可以删除指定范围内的元素。如果要从multiset中删除元素,应该使用find()函数来获得指向要删除元素的迭代器。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

C++ 教程