在C++ STL中的multiset erase()
multiset
是C++ 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()
函数来获得指向要删除元素的迭代器。