На этом шаге мы рассмотрим пример поиска элементов.
В следующем примере показано, как при помощи глобального алгоритма 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. Результат выполения приложения
На следующем шаге мы рассмотрим еще один пример.