84

2つのベクトルを比較する方法はありますか?

if (vector1 == vector2)
    DoSomething();

注:現在、これらのベクトルはソートされておらず、整数値が含まれています。

4

5 に答える 5

83

コード(vector1 == vector2)は正しいC++構文です。==ベクトルの演算子があります。

equal()短いベクトルを長いベクトルの一部と比較する場合は、ベクトルの演算子を使用できます。(ここにドキュメント

次に例を示します。

using namespace std;

if( equal(vector1.begin(), vector1.end(), vector2.begin()) )
    DoSomething();
于 2012-09-29T00:13:05.577 に答える
20

std::mismatchC++のメソッドを確認 してください。

ベクトルの比較については、DaniWebフォーラムで議論されており、回答もあります。

C ++:2つのベクトルの比較

以下のSO投稿を確認してください。あなたに役立ちます。彼らは異なる2の方法で同じことを達成しました。

2つのベクトルを比較するC++

于 2011-06-06T05:19:29.307 に答える
6

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))。これは、「すべての反復アイテムが同じである」というイテレーターにとって使いやすい定義にすぎません。

他のコンテナに関する同様の質問:

于 2019-11-06T12:14:21.267 に答える
4

ここでの説明によると、次を使用して2つのベクトルを直接比較できます。

==

if (vector1 == vector2){
   //true
}
else{
   //false
}
于 2018-03-20T18:33:03.973 に答える
1

それらが本当に絶対にソートされないままである必要がある場合(実際にはそうではありません..そして、数十万の要素を扱っている場合は、なぜこのようなベクトルを比較するのかを尋ねる必要があります)、比較を一緒にハックすることができますソートされていない配列で機能するメソッド。

私がそれを行う唯一の方法は、一時的なものを作成し、それにすべての要素を追加してから、の個々の要素を検索し、見つかった場合はそれを削除することによってvector3、を行うふりをすることでした。それはひどいことのように聞こえますが、それが私がC++標準ライブラリをすぐに作成しない理由です。set_intersectionvector1vector2vector3

ただし、実際には、最初に並べ替えるだけです。

于 2011-06-06T05:56:59.880 に答える