Шаг 183.
Библиотека STL.
Контейнеры STL. Примеры. Поиск элементов с известным значением

    На этом шаге мы рассмотрим пример поиска элементов.

    В следующем примере показано, как при помощи глобального алгоритма find_if() найти элемент с заданным значением..

//---------------------------------------------------------------------------

#include <vcl.h>
#include <iostream>
#include <iterator>
#include <map>
#include <algorithm>
#include <conio.h> //необходимо для getch()

#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused
using namespace std;

std::string ToRus(const std::string &in)
{
  char *buff = new char [in.length()+1];
  CharToOem(in.c_str(),buff);
  std::string out(buff);
  delete [] buff;
  return out;
}

// Объект функции, проверяющий значение элемента отображения
template <class K, class V>
class value_equals
{
  private:
    V value;
  public:
    // Конструктор (инициализация значения, используемого при сравнении)
    value_equals (const V& v) : value(v) {}
    // Сравнение
    bool operator() (pair<const K, V> elem) { 
      return elem.second == value;
    }
};

int main(int argc, char* argv[])
{

  typedef map<float,float> FloatFloatMap;
  FloatFloatMap coll;
  FloatFloatMap::iterator pos;

  // Заполнение контейнера
  coll[1]=7; 
  coll[2]=4; 
  coll[3]=2; 
  coll[4]=3; 
  coll[5]=6; 
  coll[6]=1; 
  coll[7]=3;

  // Поиск элемента с ключом 3.0
  cout << ToRus("Поиск элемента с ключом 3.0\n");
  pos = coll.find(3.0); // Логарифмическая сложность
  if (pos != coll.end()) {
    cout << pos->first << ": " 
         << pos->second << endl;
  }

  // Поиск элемента со значением 3.0
  cout << ToRus("Поиск элемента со значением 3.0\n");
  pos = find_if(coll.begin(),coll.end(), // Линейная сложность
                value_equals<float,float>(3.0)); 
  if (pos != coll.end()) {
    cout << pos->first << ": " 
         << pos->second << endl;
  }

  getch();
  return 0;
}

//---------------------------------------------------------------------------
Текст этого примера можно взять здесь.

    Результат выполнения программы выглядит так:


Рис.1. Результат выполения приложения

    На следующем шаге мы рассмотрим еще один пример.




Предыдущий шаг Содержание Следующий шаг