在std::multiset中,如果找到一个元素,有一个函数或算法可以只擦除一个样本(单播或重复)
In std::multiset is there a function or algorithm to erase just one sample (unicate or duplicate) if an element is found
也许这是重复的,但我在搜索中没有发现任何内容:当在std::multiset
上调用erase(value)
时,所有找到值的元素都将被删除。我能想到的唯一解决方案是:
std::multiset<int>::iterator hit(mySet.find(5));
if (hit!= mySet.end()) mySet.erase(hit);
这还可以,但我觉得可能会更好。有什么想法吗?
auto itr = my_multiset.find(value);
if(itr!=my_multiset.end()){
my_multiset.erase(itr);
}
我想还有一种更清洁的方式来实现同样的目标。但这就完成了任务。
试试这个:
multiset<int> s;
s.erase(s.lower_bound(value));
只要您能够确保value
存在于集合中。这很管用。
if(my_multiset.find(key)!=my_multiset.end())
my_multiset.erase(my_multiset.equal_range(key).first);
这是我能想到的在c++中删除多集中单个实例的最佳方式
这对我有效:
multi_set.erase(multi_set.find(val));
如果val存在于多集中。
我会尝试以下操作。
首先调用equal_range()
来查找与键相等的元素范围。
如果返回的范围不是空的,则erase()
是元素的范围(即采用两个迭代器的erase()
),其中:
第一个参数是返回的中第二个元素的迭代器范围(即返回一个过去的
.first
)和第二个参数作为返回的范围对迭代器的CCD_ 8。
阅读templatepedef后编辑(谢谢!)评论:
如果要删除一个(而不是所有)重复:如果equal_range()
返回的对至少有两个元素,则erase()
通过将返回的对中的.first传递给erase()
:的单迭代器版本来删除第一个元素
伪代码:
pair<iterator, iterator> pit = mymultiset.equal_range( key );
if( distance( pit.first, pit.second ) >= 2 ) {
mymultiset.erase( pit.first );
}
由于C++17(请参阅此处):
mySet.extract(val);
我们可以这样做:
multiset<int>::iterator it, it1;
it = myset.find(value);
it1 = it;
it1++;
myset.erase (it, it1);
这里有一个使用"if语句与初始值设定项";在C++17:中引入
if(auto it = mySet.find(value); it != mySet.end())
mySet.erase(value);
这种语法的优点是迭代器it
的作用域被缩减为这个if
语句。
auto itr=ms.find(value);
while(*itr==value){
ms.erase(value);
itr=ms.find(value);
}
试试这个它会删除多集中所有可用的重复项。
事实上,正确的答案是:
my_multiset.erase(my_multiset.find(value));
相关文章:
- 引用一个已擦除类型(void*)的指针
- 如何在写入文件时擦除最后一个逗号
- 在矢量中使用擦除时双重释放或损坏(快速顶部).如何擦除一个矢量的几个项目知道它们的索引?
- 给定一个向量,擦除低于 itemsnum 的元素
- std::list<std::shared_ptr>::擦除得到了一个SIGSEGV
- 使用迭代器时遇到问题,每 M 次传递一次擦除一个向量项
- 插入排序与插入/擦除?(所以我需要对一个向量进行排序,而不是手工做事,而是使用插入和擦除
- 无法使用擦除方法删除矢量的最后一个元素
- 使用擦除-删除范例将元素从一个向量移动到另一个向量
- 如果地图擦除范围内的第一个和最后一个相等,则是否删除该元素
- 如何在下一次函数调用中使用 STL 映射擦除从最后一个位置
- 使用索引向量擦除另一个向量的索引
- C++多集与结构只擦除一个,快速(过载?
- 正在擦除文件中的最后一个输入
- 使用do while擦除一个向量中的元素并将其添加到另一个向量
- 一个元素大小的容器,使用数据时自动擦除模式
- std::map - 擦除最后一个元素
- 您好,我想将一个字符复制到 2D 数组,但第二个字符会擦除第一个字符
- 将空格字符添加到附加的每个项目,以必须擦除最后一个项目.如何改进
- 需要一个带有 O(1) 擦除的 std::vector