我知道如何使用 STL 删除 std 向量的重复项
vec1.erase(std::unique(vec1.begin(), vec1.end()),vec1.end());
但是,如果我有一个vec2
长度vec1
相同的不同索引,并且我希望删除已删除的相同索引vec1
怎么办?这样,如果在 vec1 中删除索引 2 、 4 和 6 ,那么在 vec2 中也会删除相同的索引
我知道如何使用 STL 删除 std 向量的重复项
vec1.erase(std::unique(vec1.begin(), vec1.end()),vec1.end());
但是,如果我有一个vec2
长度vec1
相同的不同索引,并且我希望删除已删除的相同索引vec1
怎么办?这样,如果在 vec1 中删除索引 2 、 4 和 6 ,那么在 vec2 中也会删除相同的索引
也许你想考虑一个不同的数据结构,也许vector<pair<vec1_type, vec2_type>>
但这是一种方法 (c++11)
std::vector<int> indices(vec1.size());
std::iota(indices.begin(), indices.end(), 0);
indices.erase(std::unique(indices.begin(), indices.end(),
[&](int a, int b){ return vec1[a] == vec1[b]; }),
indices.end());
auto vec1_iterator = vec1.begin();
auto vec2_iterator = vec2.begin();
for (int i : indices) {
*vec1_iterator++ = vec1[i];
*vec2_iterator++ = vec2[i];
}
vec1.erase(vec1_iterator, vec1.end());
vec2.erase(vec2_iterator, vec2.end());
复制原始向量,然后遍历这两个向量以搜索匹配项,并在未找到匹配项时从并行向量中删除:
vector<int> copy(vec1);
vec1.erase(std::unique(vec1.begin(), vec1.end()),vec1.end());
vector<string> pv = // your "parallel" vector
for (int i = 0 ; i != vec1.size() ; i++) {
while (copy[i] != vec1[i]) {
copy.erase(copy.begin()+i);
pv.erase(pv.begin()+i);
}
}