从集合的向量中删除集合
Removing set from vector of sets
我有一个充满集合的向量,我使用这段代码在向量中寻找一个int:
for(int j = 0; j <= vector.size(); ++j){
if(vector[j].find(find) != vector[j].end())
std::cout << "FOUND: " << propagator << "n";
}
}
这将在找到"find"时输出,是否有返回向量中该集合的位置的方法
例如,如果find=5,并且我的向量包含元素:
[0] 2 3
[1] 4 5
不管怎样,我可以在位置1返回集合吗,最终我想从阵列中删除整个集合
我一直在使用
for(int j = 0; j <= vector.size(); ++j){
if(vector[j].find(find) != vector[j].end())
vector.erase (vector.begin()+j);
}
返回位置并不困难。例如,您可以使用标准算法std::find_if
,然后应用函数std::distance
来确定位置。或者您可以使用循环自己编写函数
std::vector<std::set<int>>::size_type i = 0;
while ( i < v.size() && v[i].find( key ) == v[i].end() ) ++i;
if ( i != v.size() ) v.erase( std::next( v.begin(), i ) );
或
auto it = std::find_if( v.begin(), v.end(),
[&]( const std::set<int> &s )
[
return ( s.find(key ) != s.end() );
} );
if ( it != v.end() ) v.erase( it );
如果需要删除向量中包含给定值(键)的所有元素,则可以使用标准算法std::remove_if
和成员函数erase
使用您已经拥有的,无需循环并再次搜索:
vector.erase(vector.begin() + j);
除非你想一次删除多个集?这可能会变得(只是稍微)更加复杂。
额外注意:您正在超出此行中向量的限制:
for(int j = 0; j <= vector.size(); ++j){
您必须在j < vector.size()
时进行迭代。尽管您可以使用int
来执行此操作,但要进行此操作的类型是size_t
(与vector<T>::size()
:匹配
for(size_t j = 0; j < vector.size(); ++j){
相关文章:
- 将数组的地址分配给变量并删除
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- C/C++编译器通常会删除重复的库吗
- 处理多个异常集合的C++方法
- 给定n个元素的m个集合.在C++中找到出现在最大集合数中的元素
- 仅从无序集合中删除一个项目
- 如何从集合中删除共享的 PTR 元素
- 为什么此C 代码不起作用 - 试图删除集合中的元素时,请参考错误
- 使用指针在恒定时间内从集合中删除
- 在集合之间交换(删除/添加)
- 我应该在程序结束时删除C++中的大树集合,还是把它留给操作系统
- 如何从集合中删除重复项
- 一个有索引的集合(用于在向量中有效地删除)
- 如何从地图中的集合中删除元素
- 如何使用c++删除mongodb集合
- 从第一个集合中删除第二个集合中包含的元素,不迭代
- 从集合的向量中删除集合
- 从集合中擦除shared_ptr是否会删除托管对象
- 自动删除std:list或std::vector等集合的实例
- 为什么我的集合中的元素没有被删除?