从二维向量中删除重复向量
removing duplicate vector from 2d vector
我对此进行了编码以从 2d 向量中删除相似的向量,这可以用于 2d 向量中的任意数量的向量,但例如我只采用了 3 个向量。
这里,{1,2,3,4}
类似于 {3,2,1,4}
所以我必须删除 {3,2,1,4}
。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
vector<vector<int> > v = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 3, 2, 1, 4 } };
vector<int> r, c;
// sorting elements
for (auto row = v.begin(); row != v.end(); row++) {
sort(row->begin(), row->end());
}
// Deleting Duplicates
for (auto row = v.begin(); row != v.end() - 1; row++) {
r.clear();
c.clear();
cout << endl
<< endl;
for (auto col = row->begin(); col != row->end(); col++) {
r.push_back(*col);
}
for (auto cr = row + 1; cr != v.end(); cr++) {
for (auto cc = cr->begin(); cc != cr->end(); cc++) {
c.push_back(*cc);
}
if (r == c)
v.erase(cr->begin(), cr->end());
c.clear();
}
cout << endl;
}
// Printing
for (auto row = v.begin(); row != v.end(); row++) {
for (auto col = row->begin(); col != row->end(); col++) {
cout << *col << " ";
}
}
}
error: no matching function for call to ‘std::vector >::erase(std::vector::iterator, std::vector::iterator)'
您可以轻松地对二维向量的元素进行排序,然后将它们一一比较。
在这里,一个函数比较两个一维向量和 returns 结果。
注意:当你的二维向量的一个元素被删除时,下一个元素会替换它,所以你不应该增加目标索引(我的代码中的索引 k)。仅当这两个元素不相等时才增加索引。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
bool twoVectorsAreEqual(vector<int> first_vec, vector<int> second_vec) {
sort(first_vec.begin(), first_vec.end());
sort(second_vec.begin(), second_vec.end());
return (first_vec == second_vec);
}
int main(){
vector<vector<int>> double_vec /* = some velue*/;
for (int i = 0; i < double_vec.size() - 1; i++) {
for (int k = i + 1; k < double_vec.size();) {
if (twoVectorsAreEqual(double_vec[i], double_vec[k])) {
double_vec.erase(double_vec.begin() + k);
else
k++;
}
}
}
我对此进行了编码以从 2d 向量中删除相似的向量,这可以用于 2d 向量中的任意数量的向量,但例如我只采用了 3 个向量。
这里,{1,2,3,4}
类似于 {3,2,1,4}
所以我必须删除 {3,2,1,4}
。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
vector<vector<int> > v = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 3, 2, 1, 4 } };
vector<int> r, c;
// sorting elements
for (auto row = v.begin(); row != v.end(); row++) {
sort(row->begin(), row->end());
}
// Deleting Duplicates
for (auto row = v.begin(); row != v.end() - 1; row++) {
r.clear();
c.clear();
cout << endl
<< endl;
for (auto col = row->begin(); col != row->end(); col++) {
r.push_back(*col);
}
for (auto cr = row + 1; cr != v.end(); cr++) {
for (auto cc = cr->begin(); cc != cr->end(); cc++) {
c.push_back(*cc);
}
if (r == c)
v.erase(cr->begin(), cr->end());
c.clear();
}
cout << endl;
}
// Printing
for (auto row = v.begin(); row != v.end(); row++) {
for (auto col = row->begin(); col != row->end(); col++) {
cout << *col << " ";
}
}
}
error: no matching function for call to ‘std::vector >::erase(std::vector::iterator, std::vector::iterator)'
您可以轻松地对二维向量的元素进行排序,然后将它们一一比较。 在这里,一个函数比较两个一维向量和 returns 结果。
注意:当你的二维向量的一个元素被删除时,下一个元素会替换它,所以你不应该增加目标索引(我的代码中的索引 k)。仅当这两个元素不相等时才增加索引。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
bool twoVectorsAreEqual(vector<int> first_vec, vector<int> second_vec) {
sort(first_vec.begin(), first_vec.end());
sort(second_vec.begin(), second_vec.end());
return (first_vec == second_vec);
}
int main(){
vector<vector<int>> double_vec /* = some velue*/;
for (int i = 0; i < double_vec.size() - 1; i++) {
for (int k = i + 1; k < double_vec.size();) {
if (twoVectorsAreEqual(double_vec[i], double_vec[k])) {
double_vec.erase(double_vec.begin() + k);
else
k++;
}
}
}