如何查找要从矢量中删除的值,并从辅助矢量中删除相同的位置?

如何查找要从矢量中删除的值,并从辅助矢量中删除相同的位置?

问题描述:

我有2个载体,比如如何查找要从矢量中删除的值,并从辅助矢量中删除相同的位置?

vector<int> set1;  // 4, 5, 2 
vector<string> set2; // a, b, c 

我希望找到并从set1删除5和和,因为它是第2项,删除set2b为好。

+0

记住的位置可能? –

+0

[相关](http://stackoverflow.com/questions/35286786)。 – nwp

首先,一个载体set1set2很奇怪。为什么不使用std::set

无论如何,假设set2不大于set1小,一个非常通用的解决方案是使用std::distance计算发现结果和set1开始之间的距离。然后,您可以再补充的距离的set2开始:

#include <vector> 
#include <algorithm> 
#include <iostream> 
#include <string> 

int main() 
{ 
    std::vector<int> set1 = { 4, 5, 2 }; 
    std::vector<std::string> set2 = { "a", "b", "c" }; 

    using std::begin; 
    using std::end; 

    // get iterator to first '5' element: 
    auto const set1_iter = std::find(begin(set1), end(set1), 5); 

    // how many steps does it take to go from start to the '5' element? 
    auto const distance = std::distance(begin(set1), set1_iter); 

    // go to same position in set2: 
    auto const set2_iter = begin(set2) + distance; 

    // use position to erase the element: 
    set2.erase(set2_iter); 

    for (auto&& element : set2) 
    { 
     std::cout << element << "\n"; 
    } 
} 

在实际的代码,你将要添加一些错误处理的情况下set2较小或者5不存在。

+0

Upvoted风格和'const'正确性!为什么在输出循环中使用rvalue ref,而不是左值? – iksemyonov

+0

@iksemyonov:我仍然在寻找一个真正健全的C++ 11基于范围的''for'循环与'auto'的指南,但到目前为止我发现'&&'版本最引人注目,因为它总是会做“正确的事情“,无论你是否处理'const'元素。我觉得整个C++社区在这里还没有得到令人满意的结论。以http://stackoverflow.com/questions/26991393/what-does-auto-e-do-in-range-based-for-loops为起点,看看这个话题的一般困惑。 –

+0

谢谢你的链接!使用流迭代器进行输出可能会隐藏这个问题吗? – iksemyonov

我建议你用一双这样

vector < pair < int,string > > set; 

set.push_back(make_pair(1,"a")); 
set.push_back(make_pair(2,"b")); 
set.push_back(make_pair(3,"c")); 

的例子,最后一个是你的问题,是如何消除表示2和矢量“B”。首先,您必须通过搜索来找到索引。

for(int x = 0; x < set.size(); x++) 
    if(set[x].first == 2){ //here we want delete data who have int of 2 
     idx = x; //save the index at variable idx 
     break; 
    } 

好的,在我们找到索引后,现在使用vector :: erase擦除它。在这里如何做到这一点。

set.erase(set.begin()+idx); 

你走了,希望它有帮助。

阅读来源:

http://www.cplusplus.com/reference/utility/pair/

http://www.cplusplus.com/reference/vector/vector/erase/