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

1 ... 59 60 61 [ 62 ] 63 64 65 ... 239


ключом, а затем вставить новый элемент с новым ключом и старым значением (подробности см. на с. 208). Как следствие, с точки зрения итератора к.1юч элемента является константным, однако прямая модификация значения элемента разрешена (если значение не принадлежит к константному тину).

Операции над отображениями и мультиотображениями

Операции создания, копирования и уничтожения

в табл. 6.26 представлены конструкторы и деструктор отображений и мультиотображений.

Таблица 6.26. Конструкторы и деструктор отображений и мультиотображений Опера ция Ол исание

тар с Создает пустое отображение или мультиотображение, не содержащее

ни одного элемента

тар с(ор) Создает пустое отображение или мультиотображение, использующее

критерий сортировки ор

тар с1(с2) Создает копию другого отображения или мультиотображения того же

типа (с копированием всех элементов)

тар c(beg,end) Создает отображение или мультиотображение, инициализированное

элементами интервала [beg,end)

map c(beg,end,op) Создает отображение или мультиотображение с критерием сортировки ор, инициализированное элементами интервала [beg,end)

c.mapC) Уничтожает все элементы и освобождает память

В таблице слово set обозначает собой одну из следующих конструкций:

О map<Elem> - отображение с сортировкой ключей по критерию lesso (оператор <);

О map<Elem,op> - отображение с сортировкой ключей по критерию ор;

О multimap<Elem> - мультиотображение с сортировкой ключей по критерию lesso (оператор <);

О nriultimap<Elem,op> - мультиотображение с сортировкой ключей по критерию ор.

Существуют два варианта определения критерия сортировки. О В параметре шаблона, например:

std: :map<float.std: :5tr1ng.5td: :greater<float> > coU:

В этом случае критерий сортировки является частью типа. Таким образом, система типов гарантирует, что объединение возможно только для контейне-

Обратите внимание иа пробел между символами >. Последовательность > воспринимается компилятором как оператор сдвига, что приводит к синтаксической ошибке.



В системах, пс поддерживающих значения по умолча1И1ю для параметров шаблонов, критерий сортировки обычно является обязательным параметром:

set<1nt.less<1nt> > coll;

ров с одним критерием сортировки. Этот способ определения критерия сортировки является наиболее распространенным. Выражаясь точнее, в третьем параметре передается тип критерия сортировки, а конкретный критерий - это объект функции, создаваемый в контейнере. Для этого конструктор контейнера вызывает конструктор по умолчанию типа критерия сортировки. Пример с определением пользовательского критерия сортировки приведен на с. 296.

О В параметре конструктора. В этом варианте можно определить тип для нескольких критериев сортировки с разными значениями или состояниями этих критериев. Такой подход удобен при формировании критериев сортировки на стадии выполнения, а также при использовании различающихся критериев сортировки, которые относятся к одному типу данных. Пример приведен на с. 218.

Если критерий сортировки не указан, по умолчанию используется объект функции lesso, сортирующий элементы оператором <.

Полное имя типа для контейнера получается излишне слож1П>1м и громоздким, поэтому для него рекомендуется определить псевдоним (то же самое полезно сделать и для определений итераторов):

typedef std::map<std::str1ng.float.std::greater<strlng> > StringFloatMap:

StringFloatMap coll:

Конструктор, которому передается начало и конец интервала, может применяться для инициа./шзации контейнера элементами контейнеров, относящихся к другим типам (от массива до стандартного входного потока данных). За подробностями обращайтесь к с. 153. Однако в данном случае элементы представляют собой пары ключ/значение , поэтому необходимо проследить за тем. чтобы элементы исходного интервала относились к типу ра\г<ключ,зпачение> или могли быть преобразованы к нему.

Немодифицирующие операции над отображениями и мультиотображениями

Отображения и мультиотображения поддерживают обычный набор операций для получения размера контейнера и сравнения элементов (табл. 6.27).

Таблица 6.27. Немодифицирующие операции над отображениями и мультиотображениями Операция Описание

c.sizeC) Возвращает фактическое количество элементов

C.emptyO Проверяет, пуст ли контейнер (эквивалент size()==0, но иногда

выполняется быстрее)



Операция

Описание

c.max sizeC) cl == с2 cl! = с2 cl < с2 с1>с2 с1 < с2 с1 >= с2

Возвращает максимально возможное количество элементов Проверяет равенство с1 и с2

Проверяет неравенаво с1 и с2 (эквивалент !(с1==с2)) Проверяет, что с1 меньше с2 Проверяет, что с1 больше с2 (эквивалент с2<с1) Проверяет, что с1 не больше с2 (эквивалент !(с2<с1)) Проверяет, что с1 не меньше с2 (эквивалент !(с1<с2))

Операции сравнения определены только для однотипных контейнеров. Это означает совпадение ключа, значепш и критерия сортировки; в противном случае происходит ошибка компиляции. Пример:

std::fnap<float.std::string> cl: Критерий сортировки: less<> std::rnap<float.std::string.std;:greater<float> > c2;

if (cl == c2) {

ОШИБКА: разные типы

Отношение меньше/бо.яьшс между контейнерами проверяется по лексикографическому критерию (см. с. 356). Для сравнения контейнеров разных типов (с разными критериями сортировки) необходимо использовать алгоритмы, описанные иа с. 352.

Специальные операции поиска

По аналогии с множествами и мультимножествами в отображениях и муль-тиотображениях определены специальные функции поиска, оптимизированные с учетом внутренней древовидной структуры контейнера (табл. 6.28).

Таблица 6.28. Специальные операции поиска в отображениях и мультиотображениях

Операция

Описание

count(key) find (key)

lower bound(key) upper bound(key) equal range(key)

Возвращает количество элементов с ключом key

Возвращает позицию первого элемента с ключом key (или end())

Возвращает первую позицию, в которой может быть вставлен злемент с ключом key (первый элемент с ключом >= key)

Возвращает последнюю позицию, в которой может быть вставлен злемент с ключом key (первый элемент с ключом > key)

Возвращает первую и последнюю позиции, в которых может быть вставлен элемент с ключом key (интервал, в котором ключи равны key)

Функция findO ищет первый элемент с заданным ключом и возвращает его позицию в виде итератора. Если поиск оказывается безуспешным, функция



1 ... 59 60 61 [ 62 ] 63 64 65 ... 239

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