我有一个充满集合的向量,我正在使用这段代码在向量中查找int:
for(int j = 0; j <= vector.size(); ++j){
if(vector[j].find(find) != vector[j].end())
std::cout << "FOUND: " << propagator << "\n";
}
}
当&#39;找到&#39;找到了,无论如何在向量中返回该集合的位置
例如,如果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);
}
答案 0 :(得分:3)
返回位置并不困难。例如,您可以使用标准算法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
答案 1 :(得分:0)
使用您已有的,无需循环再次搜索:
vector.erase(vector.begin() + j);
除非你想一次删除多个套装?这可能会使(只是轻微)更复杂。
答案 2 :(得分:0)
附加说明:您在此行中超出了矢量限制:
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){