"multiset" & "multimap" - в чем смысл?

Как говорится в вопросе ... Я не понимаю насчет multisets / multimaps.

Итак, какова цель?

7 ответов


некоторые варианты использования:

multimap

  • С почтовым индексом в качестве ключа, все люди, которые имеют этот почтовый индекс
  • С идентификатором счета в качестве ключа, все открытые заказы этого лица / счета
  • словарь, с каждым ключевым словом различных объяснений

multiset

по сути является картой с ключом и целым числом.

  • инвентарь магазина, все продукты имеют их ключ и сумма по-прежнему доступно значение
  • аккумулированные данные по сбываний магазина, каждый раз продукт продан идентификатор продукта get добавлен в multiset, тем самым увеличивая количество проданных

один пример, где multimap был бы полезен, если бы у вас была ситуация, когда большую часть времени ключи уникальны, но иногда это не так.

например, если вы создавали класс кэша, который использовал хэш в качестве ключа. В большинстве случаев два разных объекта не будут иметь одинаковый хэш, поэтому ключи будут уникальными. Но возможно, что вы получите хэш-коллизии для разных объектов, поэтому вам понадобится multimap для покрытия этой ситуации.

другой примером может быть любой не уникальный индекс (например, в базе данных).

Что касается multiset - я думаю, что это было бы менее полезно. Единственное, что я могу придумать, это использовать его как своего рода автоматически отсортированный список.


multiset или multimap просто для ситуаций, когда может быть более одного конкретного элемента. Например, предположим, вы хотите создать индекс для книги. Вы просматриваете текст, выбрасываете все действительно распространенные бессмысленные слова ("a"," an"," the " и т. д.) а затем составьте список всех остальных, и место в книге, где каждый из них произошел.

довольно много слов появится на более чем одной странице, и в этом случае у вас будет несколько сопоставлений записей от одного слова до разных страниц. Одним из способов справиться с этим было бы multimap от слов до номеров страниц.


http://www.cplusplus.com/reference/stl/multimap/

карты являются своего рода ассоциативными контейнеры, в которых хранятся сформированные элементы по комбинации ключевого значения и сопоставленное значение, похожее на map контейнеры, но позволяющие разные элементы, имеющие одинаковое ключевое значение.

Это своего рода реестр, где элементы могут совместно использовать ключ. Вы можете думать о компаниях и сотрудниках. Адрес улицы ключ и работники ценности.


вот что Википедия говорит о использует:

  • в системе регистрации студентов, где студенты могут быть зачислены в несколько классов одновременно может быть ассоциация для каждого зачисление студента на курс, где ключ-идентификатор студента и значение-идентификатор курса. Если студент обучается на трех курсах, будет три ассоциации содержащий тот же ключ.
  • индекс книги может сообщить любое количество ссылок для данного индекса срок, и таким образом может быть закодирован как multimap от индексных терминов к любым количество справочных мест

используйте multimap, где вы хотите использовать вид дерева структуры.


наиболее важным преимуществом использования multiset над вектором / списком (или любым другим контейнером) является временная сложность операции поиска. средняя сложность времени обращения для multiset-O(logn), а unordered_multiset-O (1). То же самое верно для multimap и ordered_multimap.