Структура данных для одного списка столбцов для хранения адресов, лучший поиск O (1) в C ++

Я новичок в С++. Мне нужно сохранить список адресов, которые дают очень хорошую производительность с точки зрения поиска и добавления новых записей.

Сначала я хочу увидеть, присутствует ли этот адрес в списке, если да, то не пишите, иначе добавьте новую запись в этот список.

И в момент той или иной операции смотреть, присутствует адрес в списке или нет.

Есть ли в C++ быстрый доступ и динамично растущая структура данных с точки зрения памяти и места.


person Basmah    schedule 18.03.2012    source источник
comment
Вам могут пригодиться новые неупорядоченные типы в C++11. Они почти идентичны std::set, std::map за исключением того, что вместо деревьев они используют хеш-таблицы. Если они вам нужны в более старых версиях стандарта, они находятся в [Boost.Unordered] (boost.org/doc/libs/1_49_0/doc/html/unordered.html) и так же хороши, как и в новом стандарте.   -  person 01100110    schedule 18.03.2012


Ответы (2)


Я бы предложил использовать std::map (обычно реализованный как некоторый красно-черное дерево), которое имеет логарифмическую сложность, поэтому на практике должно быть достаточно.

Если у вас есть реализация, соответствующая стандарту C++11, вы можете рассмотреть std::unordered_map (обычно реализован в виде некоторой хеш-таблицы).

Если вам не нужны никакие данные, связанные с ключами, а только для обработки их наборов, используйте std::set или std::unordered_set

И многие библиотеки (Boost, Qt,...) также реализуют ассоциативные контейнеры.

person Basile Starynkevitch    schedule 18.03.2012
comment
Вы можете использовать boost::unordered_map в C++03. - person Cat Plus Plus; 18.03.2012
comment
Но Boost не является стандартным, даже если он широко доступен. Некоторые люди могут захотеть избежать этого. - person Basile Starynkevitch; 18.03.2012
comment
Избегать Boost глупо и контрпродуктивно. std::unordered_map в значительной степени взят из Boost, а реализация Boost, вероятно, довольно автономна и может быть скопирована в проект, если кто-то не зависит от полного пакета Boost. - person Cat Plus Plus; 18.03.2012
comment
@Basile: Это проблемы этих людей, а не проблема Интернета в целом. - person Puppy; 18.03.2012
comment
@Basil, спасибо за предложение. Не могли бы вы объяснить мне, в чем разница в производительности в С++ std: map и std::unordered map? и std::неупорядоченный набор? Какое преимущество я получу, используя неупорядоченный набор. - person Basmah; 18.03.2012
comment
@Basmah: Хорошая книга или сайт по С++ объяснили бы намного лучше или быстрее, чем я. - person Basile Starynkevitch; 18.03.2012

Вы ищете boost::unordered_map.

person Joost Sannen    schedule 18.03.2012