В чем разница между установкой vs map в С++?

Меня все еще путают различия между картой и наборами данных в STL. Я знаю, что set хранит значения отсортированным образом, а как насчет карты? Сохраняет ли значения в отсортированном порядке? Карта хранит пары значений (ключ, значение), в чем преимущество этой функции?

Ответы

Ответ 1

Как минимум для упорядоченных версий (std::map и std::set), map облегчает использование set, позволяя вам ввести внешний ключ (map::key_type), чтобы определить порядок элементы, которые иначе не могут быть получены из типа данных map (map::data_type). Если упорядочение может быть полностью выведено (путем сравнения двух элементов) из map::data_type, тогда вам обычно лучше использовать set, и в этом случае вы избежите дублирования ключа как map::key_type.

В некотором смысле, std::map является избыточным, и вы всегда можете использовать std::set вместо этого, введя новый тип элемента, который объединяет ключи с данными и предоставляет необходимую функцию сравнения. Однако это громоздко и обычно неэлегантно.

Чтобы выяснить, почему a set может быть громоздким по a map; A set будет хранить пару <key, data> в качестве элемента, а map будет поддерживать разделение между 2. Это означает, например, что для операции find в set, где параметр find построенный на месте, весь элемент <key, data> должен быть построен, хотя он действительно находится на key, который необходим для операции find. Конструкция элементов data элемента set тогда избыточна и может быть довольно неэффективной, если, например, члены data представляют дисковое хранилище или связаны с какой-либо другой сложной или долговременной конструкцией. map устраняет это, только создавая фактический key, необходимый для find.

Подводя итог, рассмотрим элемент <key, data>, для которого вам интересно, использовать ли map или set для хранения нескольких упорядоченных элементов. Если key охватывает весь data (это означает, что data пуст или еще key == data), вам лучше использовать set, в этом случае вы избежите a) дублирования хранилища key и b), вероятно, потребуется синхронизировать 2 key. Если key не содержится в data, тогда (вы должны) использовать map. Трудная часть заключается в том, что key является (правильным) подмножеством в data. Затем вам необходимо скомпенсировать стоимость поддержания дубликата key (для a map) и стоимости построения data, которая не перекрывается с key (для a set), последняя, ​​которая может произойти для операций find.

Ответ 2

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

Ответ 3

A map хранит выбранные ключи. Он отображает ключи в значения. Обычно он реализуется как двоичное дерево поиска для ключей. A set - это отображение, в котором значения не имеют значения. unordered_map и unordered_set (новые в С++ 11) сохраняют ключи несортированными и используют хеш-таблицу для поиска.

Ответ 4

std::map - ассоциативный контейнер, хранящий пары ключей-значений с уникальными ключами. std::set также является ассоциативным контейнером, который хранит набор сортировщиков объектов (или ключей).

Вы должны посмотреть std:: map и std::. установить

Ответ 5

std::map и std::set очень похожи. У них обоих есть сортированная коллекция уникальных ключей. Кроме того, map имеет значение, связанное с каждым ключом.