c++ - 从集合 vector 中删除集合

标签 c++ vector set

我有一个充满集合的 vector ,我正在使用这段代码在 vector 中寻找一个整数:

for(int j = 0; j <= vector.size(); ++j){
  if(vector[j].find(find) != vector[j].end())
   std::cout << "FOUND: " << propagator << "\n";
  }
}

这将在找到“find”时输出,是否有返回该集合在 vector 中的位置

例如,如果 find = 5,并且我的 vector 包含元素:

[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 );

如果您需要删除 vector 中包含给定值(键)的所有元素,那么您可以使用标准算法 std::remove_if 以及成员函数 erase

关于c++ - 从集合 vector 中删除集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23156324/

相关文章:

c++ - 编译时已知数组大小 : passed compilation using g++ but not for icpc

c++ - 有没有办法在qt中卸载eventfilter?

c++ - 如何在Crypto++中将两个Source组合成一个新Source?

c++ - 返回 boost::smatch 并获取子串 "\000"

c++ - 删除期间的 CPP Vector 构造函数调用

java - 将一个集合分成更小的集合 - Java

c++ - 将 c++ vector<float> 复制到 Obj-C Float32 数组的最快方法

java - ImageJ:获取特定的Radiobox

list - 如何比较haskell列表中的内容,看看它们是否部分相同?

php - 选择时默认使用集合名称 'utf8'有什么不好的影响吗?