如何查找要从矢量中删除的值,并从辅助矢量中删除相同的位置?
我有2个载体,比如如何查找要从矢量中删除的值,并从辅助矢量中删除相同的位置?
vector<int> set1; // 4, 5, 2
vector<string> set2; // a, b, c
我希望找到并从set1
删除5
和和,因为它是第2项,删除set2
b
为好。
首先,一个载体叫set1
或set2
很奇怪。为什么不使用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不存在。
Upvoted风格和'const'正确性!为什么在输出循环中使用rvalue ref,而不是左值? – iksemyonov
@iksemyonov:我仍然在寻找一个真正健全的C++ 11基于范围的''for'循环与'auto'的指南,但到目前为止我发现'&&'版本最引人注目,因为它总是会做“正确的事情“,无论你是否处理'const'元素。我觉得整个C++社区在这里还没有得到令人满意的结论。以http://stackoverflow.com/questions/26991393/what-does-auto-e-do-in-range-based-for-loops为起点,看看这个话题的一般困惑。 –
谢谢你的链接!使用流迭代器进行输出可能会隐藏这个问题吗? – 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://stackoverflow.com/questions/35286786)。 – nwp