2つのベクトルを比較する方法はありますか?
if (vector1 == vector2)
DoSomething();
注:現在、これらのベクトルはソートされておらず、整数値が含まれています。
コード(vector1 == vector2
)は正しいC++構文です。==
ベクトルの演算子があります。
equal()
短いベクトルを長いベクトルの一部と比較する場合は、ベクトルの演算子を使用できます。(ここにドキュメント)
次に例を示します。
using namespace std;
if( equal(vector1.begin(), vector1.end(), vector2.begin()) )
DoSomething();
std::mismatch
C++のメソッドを確認 してください。
ベクトルの比較については、DaniWebフォーラムで議論されており、回答もあります。
以下のSO投稿を確認してください。あなたに役立ちます。彼らは異なる2の方法で同じことを達成しました。
C++11標準==
オンstd::vector
他の人は、ベクトルの内容と動作を比較していると述べていますが、これはC ++11N3337標準ドラフトからの引用です。operator==
最初に、第23.2.1章「一般的なコンテナ要件」を確認します。この要件には、を含むすべてのコンテナに対して有効でなければならない事項が記載されていますstd::vector
。
そのセクション表96「コンテナ要件」にはエントリが含まれています。
Expression Operational semantics =========== ====================== a == b distance(a.begin(), a.end()) == distance(b.begin(), b.end()) && equal(a.begin(), a.end(), b.begin())
セマンティクスのdistance
一部は、両方のコンテナーのサイズが同じであることを意味しますが、ランダムアクセスではないアドレス可能なコンテナーに対して、一般化されたイテレーターにわかりやすい方法で記述されています。distance()
24.4.4「イテレータ操作」で定義されています。
次に、重要な質問は、どういうequal()
意味かです。表の最後に、次のように表示されます。
注:アルゴリズムequal()は、25節で定義されています。
そしてセクション25.2.11「等しい」でその定義を見つけます:
template<class InputIterator1, class InputIterator2> bool equal(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2); template<class InputIterator1, class InputIterator2, class BinaryPredicate> bool equal(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, BinaryPredicate pred);
1戻り値:範囲内のすべてのイテレータiについて
[first1,last1)
、次の対応する条件が成立する場合はtrue:*i == *(first2 + (i - first1))
、pred(*i, *(first2 + (i - first1))) != false
。それ以外の場合は、falseを返します。
私たちの場合、バージョンのないオーバーロードされたバージョンを気にします。これBinaryPredicate
は、最初の擬似コード定義に対応します*i == *(first2 + (i - first1))
。これは、「すべての反復アイテムが同じである」というイテレーターにとって使いやすい定義にすぎません。
他のコンテナに関する同様の質問:
それらが本当に絶対にソートされないままである必要がある場合(実際にはそうではありません..そして、数十万の要素を扱っている場合は、なぜこのようなベクトルを比較するのかを尋ねる必要があります)、比較を一緒にハックすることができますソートされていない配列で機能するメソッド。
私がそれを行う唯一の方法は、一時的なものを作成し、それにすべての要素を追加してから、の個々の要素を検索し、見つかった場合はそれを削除することによってvector3
、を行うふりをすることでした。それはひどいことのように聞こえますが、それが私がC++標準ライブラリをすぐに作成しない理由です。set_intersection
vector1
vector2
vector3
ただし、実際には、最初に並べ替えるだけです。