Sdílet prostřednictvím


binary_search

Ověřuje, zda je prvek v seřazené oblasti, která se rovná zadané hodnotě nebo je rovnocenné ve smyslu, určené binárního predikátu.

template<class ForwardIterator, class Type>
   bool binary_search(
      ForwardIterator _First, 
      ForwardIterator _Last,
      const Type& _Val
   );
template<class ForwardIterator, class Type, class BinaryPredicate>
   bool binary_search(
      ForwardIterator _First, 
      ForwardIterator _Last,
      const Type& _Val, 
      BinaryPredicate _Comp
   );

Parametry

  • _First
    Předávání iterační adresování pozici první prvek v rozsahu mají být prohledány.

  • _Last
    Dopředu iterační adresování pozice jeden za poslední prvek v rozsahu mají být prohledány.

  • _Val
    Hodnota požadované hodnoty prvku odpovídat nebo s prvku hodnotu určenou binárního predikátu, která musí splňovat podmínku.

  • _Comp
    Uživatelem definované funkce predikátu objektu, který definuje smysl, ve kterém jeden prvek je menší než jiné.Binárního predikátu trvá dva argumenty a vrátí true-li splněna a false Pokud nejsou splněny.

Vrácená hodnota

truePokud prvek nachází v rozsahu, který je rovný nebo rovnocenné zadanou hodnotu; jinak false.

Poznámky

Seřazené zdrojové oblasti odkazuje, musí být platné; všechny ukazatele musí být dereferenceable a v rámci posloupnosti, musí být dostupná z první poslední pozice ve incrementation.

Seřazené oblasti každé uspořádán podmínkou pro použití binary_search algoritmus podle stejné pořadí jako je algoritmus používaný řazení kombinované rozsahy.

Zdrojové oblasti nebyly změněny binary_search.

Musí být nižší hodnoty typů dopředu u iterátorů-než srovnatelné objednáno, tak, aby dané dva prvky, ji může stanovit nebo že jsou rovnocenné (v tom smyslu, že ani menší než ostatní), jeden je menší než ostatní.Výsledkem je pořadí mezi prvky nonequivalent

Složitost algoritmu je pro náhodný přístup u iterátorů logaritmické a jinak s počet kroků úměrné lineární (_Last –_First).

Příklad

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

// Return whether modulus of elem1 is less than modulus of elem2
bool mod_lesser ( int elem1, int elem2 )
{
   if (elem1 < 0)
      elem1 = - elem1;
   if (elem2 < 0)
      elem2 = - elem2;
   return elem1 < elem2;
}

int main( )
{
   using namespace std;

   list <int> L;
   list <int>::iterator Iter;
   bool b1, b2;

   L.push_back( 50 );
   L.push_back( 10 );
   L.push_back( 30 );
   L.push_back( 20 );
   L.push_back( 25 );
   L.push_back( 5 );

   L.sort( );

   cout << "L = ( " ;
   for ( Iter = L.begin( ) ; Iter != L.end( ) ; Iter++ )
      cout << *Iter << " ";
   cout << ")" << endl;

   b1 = binary_search( L.begin( ), L.end( ), 10 );
   if  ( b1 )
      cout << "There is an element in list L with a value equal to 10."
           << endl;
   else
      cout << "There is no element in list L with a value equal to 10."
           << endl;
   // a binary_search under the binary predicate greater
   L.sort ( greater<int> ( ) );
   b2 = binary_search( L.begin( ), L.end( ), 10 , greater<int> ( ) );
   if  ( b2 )
      cout << "There is an element in list L with a value equivalent to 10 "
           << "under greater than." << endl;
   else
      cout << "No element in list L with a value equivalent to 10 "
           << "under greater than." << endl;

   // a binary_search under the user-defined binary predicate mod_lesser
   vector <int> v1;
   vector <int>::iterator Iter1;
   int i;
   for ( i = -2 ; i <= 4 ; i++ )
   {
      v1.push_back( i );
   }
   sort ( v1.begin ( ) , v1.end ( ) , mod_lesser );

   cout << "Ordered under mod_lesser, vector v1 = ( " ;
   for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
      cout << *Iter1 << " ";
   cout << ")" << endl;

   bool b3 = binary_search( v1.begin( ), v1.end( ), -3 , mod_lesser );
   if ( b3 )
      cout << "There is an element with a value equivalent to -3 "
           << "under mod_lesser." << endl;
   else
      cout << "There is not an element with a value equivalent to -3 "
           << "under mod_lesser." << endl;
}
  
  
  

Požadavky

Záhlaví: <algorithm>

Obor názvů: std

Viz také

Referenční dokumentace

Standardní šablona knihovny