この記事は機械翻訳されています。英語版の記事を表示するには、[英語] のチェック ボックスをオンにしてください。また、テキストにマウス ポインターを合わせると、ポップアップ ウィンドウに英語のテキストを表示することもできます。
翻訳
英語

equal

 

二項述語によって指定された等値または等価について、2 つの範囲を要素ごとに比較します。

異なる種類のコンテナー (たとえばベクターとリスト) 内の要素を比較する場合、異なる要素型を比較する場合、またはコンテナー内の一部の範囲を比較する必要がある場合は、std::equal を使用します。  そうではなく、同じ種類のコンテナー内の同じ型の要素を比較する場合は、各コンテナーによって提供される非メンバーの operator== を使用します。  

C++14 コードでは 2 範囲のオーバーロードを使用します。これは、2 つ目の範囲に対して 1 つの反復子のみを受け取るオーバーロードでは、2 つ目の範囲が 1 つ目の範囲より大きい場合にその差を検出できず、2 つ目の範囲が 1 つ目の範囲より小さい場合に未定義の動作が発生するためです。


        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 Comp
   );

// C++14
template<class InputIterator1, class InputIterator2>
   bool equal(
      InputIterator1 First1, 
      InputIterator1 Last1,
      InputIterator2 First2,
      InputIterator2 Last2
   );

template<class InputIterator1, class InputIterator2, class BinaryPredicate>
   bool equal(
      InputIterator1 First1,
      InputIterator1 Last1,
      InputIterator2 First2,
      InputIterator2 Last2,

      BinaryPredicate Comp
   );

First1

テストする 1 つ目の範囲内の最初の要素の位置を示す入力反復子。

Last1

テストする 1 つ目の範囲内の最後の要素の 1 つ後の位置を示す入力反復子。

First2

テストする 2 つ目の範囲内の最初の要素の位置を示す入力反復子。

First2

テストする 2 つ目の範囲内の最後の要素の 1 つ後の位置を示す入力反復子。

Comp

2 つの要素が等価であると見なされた場合に条件が満たされると定義する、ユーザー定義の述語関数オブジェクト。  二項述語は 2 つの引数を受け取り、条件が満たされている場合は true、満たされていない場合は false を返します。  

二項述語の下で、要素ごとに比較したとき、範囲が同一または等価の場合に限り true。それ以外の場合は false

検索対象の範囲が有効であること、すべての反復子が逆参照可能であること、さらに先頭位置からのインクリメントにより最後の位置に到達可能であることが必要です。

2 つの範囲の長さが等しい場合、アルゴリズムの時間の複雑さは、範囲に含まれる要素の数に比例します。  それ以外の場合、関数は直ちに false を返します。  

operator== でもユーザー定義の述語でも、そのオペランド間で対称的、再帰的、および推移的な等価関係を強制する必要はありません。

使用例

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{
    vector<int> v1 { 0, 5, 10, 15, 20, 25 };
    vector<int> v2 { 0, 5, 10, 15, 20, 25 };
    vector<int> v3 { 0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50 };

    // Using range-and-a-half equal:
    bool b = equal(v1.begin(), v1.end(), v2.begin());
    cout << "v1 and v2 are equal: "
       << b << endl; // true, as expected

    b = equal(v1.begin(), v1.end(), v3.begin());
    cout << "v1 and v3 are equal: "
       << b << endl; // true, surprisingly

    // Using dual-range equal:
    b = equal(v1.begin(), v1.end(), v3.begin(), v3.end());
    cout << "v1 and v3 are equal with dual-range overload: "
       << b << endl; // false

    return 0;
}


必要条件

ヘッダー: <algorithm>

名前空間: std

表示: