私は以下のような2つのベクトルの要素を、比較するためのアルゴリズムや標準ライブラリ関数が必要になります。2つのstd :: vectorに同じ要素だけが含まれているかどうかを確認するにはどうすればよいですか?
class Utility
{
template <class T>
static bool CheckIfVectorsEquivalent( const std::vector<T> & Vec1,
const std::vector<T> & Vec2)
{
// ???
}
};
は、以下の仕様の下での作業:
std::vector<int> v1, v2, v3, v4, v5, v6, v7, v8;
// Returns false when not all the elements are matching between vectors
v1.push_back(1);
v1.push_back(3);
v1.push_back(5);
v2.push_back(2);
v2.push_back(3);
v2.push_back(8);
Utility::CheckIfVectorsEquivalent(v1, v2); // Must return false
// Returns true when all the elements match, even if the are not in the same order
v3.push_back(3);
v3.push_back(1);
v3.push_back(7);
v4.push_back(7);
v4.push_back(3);
v4.push_back(1);
Utility::CheckIfVectorsEquivalent(v3, v4); // Must return true
// Returns false when one of the vectors is subset of the other one
v5.push_back(3);
v5.push_back(1);
v5.push_back(7);
v6.push_back(7);
v6.push_back(3);
v6.push_back(1);
v6.push_back(18);
v6.push_back(51);
Utility::CheckIfVectorsEquivalent(v5, v6); // Must return false
// Returns true when the both vectors are empty
Utility::CheckIfVectorsEquivalent(v7, v8); // Must return true
は、任意の(STL付き)標準的な方法はありますこれをする?そうでない場合は、どうやってこのアルゴリズムを書くことができますか?それは私をあまりにも混乱させた。
標準では、std :: is_permutationは要素を最大でもO(n^2)と比較しているため、これはおそらく遅いですが、書き込むのは簡単です。 –
それはO(N^2)です。 –
これはT型の注文を前提にしていないので、これが最良の答えだと思います。 – ex0du5