Унарный предикат (unary predicate). Предикат с одним параметром.
Функцияbind(). Библиотечная функция, связывающая один или несколько аргументов с вызываемым выражением. Функция bind() определена в заголовке functional.
Функцияcref(). Библиотечная функция, возвращающая копируемый объект, содержащий ссылку на константный объект типа, не допускающего копирования.
Функцияref(). Библиотечная функция, создающая копируемый объект из ссылки на объект типа, не допускающего копирования.
Глава 11
Ассоциативные контейнеры
Ассоциативные контейнеры кардинально отличаются от последовательных: элементы в ассоциативном контейнере хранятся и предоставляются по ключу. Элементы последовательного контейнера, напротив, хранятся и предоставляются последовательно, по их позиции в контейнере.
Хотя поведение ассоциативных контейнеров по большей части одинаково, у последовательных контейнеров оно отличается и зависит от способа использования ключей.
map (карта) и set (набор). Элементами контейнера map являются
Библиотека предоставляет восемь ассоциативных контейнеров (табл. 11.1), которые различаются по трем факторам: (1) они являются набором (set) или картой map; (2) они требуют уникальных ключей или допускает их совпадение; (3) они хранят элементы упорядочено или нет. В именах контейнеров, допускающих совпадение ключей, присутствует слово multi; имена контейнеров, не упорядочивающих хранимые ключи начинаются со слова unordered. Следовательно, unordered_multi_set — это набор, не требующий уникальных ключей и хранящий элементы неупорядоченными, в то время как set — это набор с уникальными ключами, которые хранятся упорядочено. Для организации своих элементов неупорядоченные контейнеры используют хеш-функцию. Подробно хеш-функции рассматриваются в разделе 11.4.
Таблица 11.1. Типы ассоциативных контейнеров
| Элементы упорядочиваются по ключу | |
|---|---|
map | Ассоциативный массив, хранящий пары ключ-значение |
set | Контейнер, в котором ключ является значением |
multimap | Карта, допускающая совпадение ключей |
multiset | Набор, допускающий совпадение ключей |
| Неупорядоченные коллекции | |
|---|---|
unordered_map | Карта, организованная по хеш-функции |
unordered_set | Набор, организованный по хеш-функции |
unordered_multimap | Хешированная карта; ключи могут повторяться |
unordered multiset | Хешированный набор; ключи могут повторяться |
Типы map и multimap определены в заголовке map; классы set и multiset — в заголовке set; неупорядоченные версии контейнеров определены в заголовках unordered_map и unordered_set соответственно.
Хотя большинство программистов знакомы с такими структурами данных, как векторы и списки, многие из них никогда не используют ассоциативные структуры данных. Прежде чем перейти к подробностям того, как библиотека поддерживает эти типы, имеет смысл начать с примеров использования этих контейнеров.
Карта (тип map) — это коллекция пар ключ-значение. Например, каждая пара может содержать имя человека как ключ и номер его телефона как значение. О такой структуре данных говорят, что она "сопоставляет имена с номерами телефонов". Тип map зачастую называют