You can push the vectors in a set and check if the reverse is already in the set. Something like this:
C++11 version:
#include <iostream>
#include <vector>
#include <algorithm>
#include <set>
using namespace std;
vector<int> myrev(vector<int>& f)
{
vector<int> s;
s.push_back(f[1]);
s.push_back(f[0]);
return s;
}
int main()
{
vector<vector<int> > data={{0,1},{0,3},{0,4},{1,0},{1,2},{1,5},{3,0},{1,0}};
set<vector<int> > unique_data;
for(auto& x: data)
{
if(unique_data.find(myrev(x))==unique_data.end())
unique_data.insert(x);
}
for(auto& x: unique_data)
{
cout << x[0] << ":" << x[1] << endl;
}
return 0;
}
C++98 version:
#include <iostream>
#include <vector>
#include <algorithm>
#include <set>
using namespace std;
vector<int> myrev(vector<int>& f)
{
vector<int> s;
s.push_back(f[1]);
s.push_back(f[0]);
return s;
}
int main()
{
vector<vector<int> > data;
//lame C++98 initialization of the vector
vector<int> tmp(2);
tmp[0]=0;tmp[1]=1;
data.push_back(tmp);
tmp[0]=0;tmp[1]=3;
data.push_back(tmp);
tmp[0]=0;tmp[1]=4;
data.push_back(tmp);
tmp[0]=1;tmp[1]=0;
data.push_back(tmp);
tmp[0]=1;tmp[1]=2;
data.push_back(tmp);
tmp[0]=1;tmp[1]=5;
data.push_back(tmp);
tmp[0]=3;tmp[1]=0;
data.push_back(tmp);
set<vector<int> > unique_data;
for(vector<vector<int> >::iterator x=data.begin(); x!=data.end(); x++)
{
if(unique_data.find(myrev(*x))==unique_data.end())
unique_data.insert(*x);
}
for(set<vector<int> >::iterator x=unique_data.begin(); x!=unique_data.end(); x++)
{
cout << (*x)[0] << ":" << (*x)[1] << endl;
}
return 0;
}