|
Программирование >> Операторы преобразования типа
typedef map<float.float> FloatFloatMap; FloatFloatMap coll: FloatFloatMap: iterator pos; Заполнение контейнера coll[l]=7 coll[2]=4 coll[3]=2 coll[4]=3 coll[5]=6 coll[6]=l coll[7]=3 Поиск элемента с ключом 3.0 pos = coll.f1nd(3.0): 1f (pos coll .endO) { cout pos->first : pos->second endl Поиск элемента со значением 3.0 pos = f1nd 1f(coll .beginO.coll ,end(). Линейная сложность value equals<float.float>(3.0)): if (pos != coll .endO) ( cout pos->first : pos->second endl: Результат выполнения программы выглядит так: Логарифмическая сложность 3: 2 4: 3 Пример с отображениями, строками и изменением критерия сортировки на стадии выполнения Следующий пример предназначен для опытных программистов, хорошо разбирающихся в STL. Он дает представление как о мощи STL, так и о некоторых недостатках, присущих этой библиотеке. В частности, демонстрируются приемы: О использования отображений; О создания и использования объектов функций; О определения критерия сортировки во время выполнения программы; О сравнения строк без учета регистра символов. cont/mapcmp.cpp #include <iostream> Iinclude <iomanip> #include <гпар> #include <str1ng> #lnclude <algorithm> using namespace std: /* Объект функции для сравнения строк * - позволяет задать критерий сравнения во время выполнения * - позволяет сравнивать символы без учета регистра class RuntimeStringCmp { public: Константы режима сравнения enum cmp mQde {normal, nocase}: private: Используемый режим сравнения const cmp mode mode; Вспомогательная функция для сравнения символов без учета регистра static bool nocase CDmpare (char cl. char c2) return toupper(cl) < toupper(c2); public: Конструктор: инициализация критерия сравнения RuntimeStringCmp (cmp mode m=normal) : mode(m) { } Сравнение bool OperatorO (const strings si. const str1ng& s2) const { if (mode == normal) { return sl<s2: else { return lexicographical compare (si.beginO. sl.endO. s2,beginO. s2.endO. nocase compare): /* Тип контейнера: * - отображение * - ключ: string * - значение: string * - специальный тип критерия сравнения */ typedef map<string.string.RuntinieStringCmp> StringStringMap; Функция для заполнения контейнера и вывода его содержимого void fillAndPrint(StringStringMap& coll): int mainC) { Создание контейнера с критерием сравнения по умолчанию StringStringMap colli: fillAnclPrlnt(colll): Создание объекта для сравнений без учета регистра символов RuntirneStringCrnp ignorecaseCRuntimeStringCmp: :nocase); Создание контейнера с критерием сравнения без учета регистра StringStringMap col 12(1gnorecase); fillAndPr1nt(coll2): void f111AndPrint(Str1ngStringMap& coll) { Вставка элементов в произвольном порядке coll[ Deutschland ] = Germany : coll[ deutsch ] = German ; со11[ Накеп ] = snag ; coll[ arbeiten ] = work : coll[ Hund ] = dog : coll[ gehen ] = go ; coll[ Unternehmen ] = enterprise : col 1[ unternehmen ] = undertake ; coll[ gehen ] = walk ; coll[ Bestatter ] = undertaker : Вывод элементов StringStringMap:;Iterator pos; cout.setf(ios::left. los::adjustfield); for (pos=coll .beginO; pos!=col 1 .endO ; ++pos) { cout setw(15) pos->f1rst.c str() pos->second endl; cout endl; Функция mainO создает два контейнера и вызывает д.пя них функцию fillAnPrint(), которая заполняет контейнеры одинаковыми элементами и выводит их содержимое. Однако контейнеры используют разные критерии сортировки. О Контейнер colli использует объект функции типа RuntirneStringCrnp. по умолчанию сравнивающий элементы оператором <. О Контейнер со112 использует объект функции типа RuntirneStringCrnp, который инициализируется значением nocase, определенным в классе RuntirneStringCrnp. При включении режима nocase объект функции сортирует строки без учета регистра символов.
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |