質問は明確ではありません。というわけで、2つ回答させていただきます。
(1) の順序を維持したまま、重複を削除し、1 つのコピーを保持myVec
する場合は、セットを使用する必要があります。
std::vector< std::vector<int> > myVec;
//or std::unordered_set if you expect mostly unique sorted inner vectors
std::set< std::vector<int> > exists;
std::vector< std::vector<int> > tmpVec;
for (std::size_t i=0, N=myVec.size(); i<N; ++i)
{
std::vector<int> key(myVec[i]);
std::sort(key.begin(), key.end());
if (exists.find(key) == exists.end())
{
exists.insert(key);
tmpVec.push_back(std::vector<int>());
std::swap(myVec[i], tmpVec.back());
}
}
std::swap(tmpVec, myVec);
(2) 複数回出現するすべての要素を削除したい場合はmyVec
、カウンターのマップが必要です。
std::vector< std::vector<int> > myVec;
//or std::unordered_map if you expect mostly unique sorted inner vectors
std::map< std::vector<int>, unsigned > counters;
// first loop to count
for (std::size_t i=0, N=myVec.size(); i<N; ++i)
{
std::vector<int> key(myVec[i]);
std::sort(key.begin(), key.end());
++counters[key];
}
// second loop to filter
std::vector< std::vector<int> > tmpVec;
for (std::size_t i=0, N=myVec.size(); i<N; ++i)
{
std::vector<int> key(myVec[i]);
std::sort(key.begin(), key.end());
if (counters[key] == 1)
{
tmpVec.push_back(std::vector<int>());
std::swap(myVec[i], tmpVec.back());
}
}
std::swap(tmpVec, myVec);
どちらのソリューションも要素の順序を尊重myVec
し、内部ベクトルの要素の元の順序を保持します。