Partager via


equal

Compare deux plages, élément par élément, à la recherche d'une égalité ou d'une équivalence, selon une condition spécifiée par un prédicat binaire.

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

Paramètres

  • _First1
    Un itérateur d'entrée s'adressant à la position du premier élément de la première plage à tester.

  • _Last1
    Itérateur d'entrée se rapportant à la position située immédiatement après l'élément final dans la première plage à tester.

  • _First2
    Un itérateur d'entrée s'adressant à la position du premier élément de la deuxième plage à tester.

  • _Comp
    Objet de fonction de prédicat définie par l'utilisateur qui définit la condition à satisfaire si deux éléments doivent être pris comme équivalent. Un prédicat binaire a besoin de deux arguments. Il renvoie true lorsqu'il est satisfait et false dans le cas contraire.

Valeur de retour

true si et seulement si les plages sont identiques ou équivalentes pour le prédicat binaire de comparaison élément à élément ; sinon, false.

Notes

La plage à fouiller doit être valide ; tous les pointeurs doivent être deréférençables, et la dernière position est accessible à partir de la première par incrémentation.

La complexité de l'algorithme est linéaire par rapport au nombre d'éléments contenus dans la plage.

L' operator== utilisé pour déterminer l'égalité entre les éléments doit appliquer une relation d'équivalence entre ses opérandes.

Exemple

// alg_equal.cpp
// compile with: /EHsc
#include <vector>
#include <algorithm>
#include <iostream>

// Return whether second element is twice the first
bool twice ( int elem1, int elem2 )
{
   return elem1 * 2 == elem2;
}

int main( )
{
   using namespace std;
   vector <int> v1, v2, v3;
   vector <int>::iterator Iter1, Iter2, Iter3;

   int i;
   for ( i = 0 ; i <= 5 ; i++ )
   {
      v1.push_back( 5 * i );
   }

   int ii;
   for ( ii = 0 ; ii <= 5 ; ii++ )
   {
      v2.push_back( 5 * ii );
   }

   int iii;
   for ( iii = 0 ; iii <= 5 ; iii++ )
   {
      v3.push_back( 10 * iii );
   }
   
   cout << "v1 = ( " ;
   for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
      cout << *Iter1 << " ";
   cout << ")" << endl;

   cout << "v2 = ( " ;
   for ( Iter2 = v2.begin( ) ; Iter2 != v2.end( ) ; Iter2++ )
      cout << *Iter2 << " ";
   cout << ")" << endl;

   cout << "v3 = ( " ;
   for ( Iter3 = v3.begin( ) ; Iter3 != v3.end( ) ; Iter3++ )
      cout << *Iter3 << " ";
   cout << ")" << endl;

   // Testing v1 and v2 for equality under identity
   bool b;
   b = equal( v1.begin( ), v1.end( ), v2.begin( ) );

   if ( b )
      cout << "The vectors v1 and v2 are equal under equality."
           << endl;
   else
      cout << "The vectors v1 and v2 are not equal under equality."
           << endl;

   // Testing v1 and v3 for equality under identity
   bool c;
   c = equal( v1.begin( ), v1.end( ), v3.begin( ) );

   if ( c )
      cout << "The vectors v1 and v3 are equal under equality."
           << endl;
   else
      cout << "The vectors v1 and v3 are not equal under equality."
           << endl;

   // Testing v1 and v3 for equality under twice
   bool d;
   d = equal( v1.begin( ), v1.end( ), v3.begin( ), twice );

   if ( d )
      cout << "The vectors v1 and v3 are equal under twice."
           << endl;
   else
      cout << "The vectors v1 and v3 are not equal under twice."
           << endl;
}
  

Configuration requise

En-tête : <algorithme>

Espace de noms : std

Voir aussi

Référence

Bibliothèque STL (Standard Template Library)