Программирование >>  Операторы преобразования типа 

1 ... 64 65 66 [ 67 ] 68 69 70 ... 239


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 объект функции сортирует строки без учета регистра символов.



1 ... 64 65 66 [ 67 ] 68 69 70 ... 239

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика