Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
valval
1 / 1 / 0
Регистрация: 29.01.2014
Сообщений: 30
#1

Какой STL-контейнер выбрать? - C++

30.01.2014, 21:02. Просмотров 1066. Ответов 12
Метки нет (Все метки)

Приветствую!
Мне нужно выбрать STL-контейнер (C++11), для хранения элементов по ключу.
Типа ключа - std::string, элемент - указатель на абстрактный объект.
На один ключ один элемент, т.е, не multi-container.

Основная операция - range-based for loop. (for (Element* e : m_elements) )
Очень редко будет использоваться - вставление элемента, почти никогда - получение элемента.

Какой контейнер мне выбрать? (самый оптимальный)
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.01.2014, 21:02
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Какой STL-контейнер выбрать? (C++):

Какой контейнер STL выбрать? - C++
Во входном потоке (FILE*) дано множество точек. Найти пару точек, расстояние между которыми минимально. Ввод и вывод в произвольной форме....

Какой контейнер в STL и для чего эффективнее использовать? - C++
Какой контейнер в STL и для чего эффективнее использовать? И почему

Какой контейнер выбрать? - C++
Добрый день. Подскажите, какой контейнер стоит выбрать? Пара ключ-значение, отдельно. Значение может повторяться. Ключ - текущий размер...

Какой контейнер выбрать? - C++
Доброго времени суток, Господа. Такая есть задача. Есть объект Scene, который является контейнером для объектов System и еще...

Какой ассоциативный контейнер выбрать? И как реализовать в нем чтение из файла? - C++
Вот сама задание: Текстовый файл содержит следующую информацию: координату точки и угол наклона прямой, проходящей через эту точку....

Какой контейнер выбрать (Нужен массив, с возможностью добавления и удаления элементов)? - C++
Привет, народ! Посоветуйте, что лучше использовать. В моей задаче нужен массив, с возможностью добавления и удаления элементов, при...

12
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
30.01.2014, 21:14 #2
valval, map или unordered_map, можно еще set или unordered_set
0
valval
1 / 1 / 0
Регистрация: 29.01.2014
Сообщений: 30
30.01.2014, 21:45  [ТС] #3
Цитата Сообщение от metaluga145 Посмотреть сообщение
valval, map или unordered_map, можно еще set или unordered_set
Ну они разные, какой под мою ситуацию подходит?
Чтобы был быстрый перебор элементов.
0
DU
1484 / 1130 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
30.01.2014, 22:24 #4
еще пара вариантов:
сортированный std::vector<std:: pair<Key, Value>> - хорошо для перебора, плохо для вставки.
сортированный std::deque<std:: pair<Key, Value>> - чуть хуже с перебором чем у вектора, вставка - лучше чем у вектора. позиции для вставки нужно будет искать каким-нибудь std::lower_bound или похожим, иначе вставка с последующей сортировкой, что не очень быстро.
0
castaway
Эксперт С++
4915 / 3023 / 370
Регистрация: 10.11.2010
Сообщений: 11,080
Записей в блоге: 10
Завершенные тесты: 1
30.01.2014, 22:27 #5
Range-based for - это перебор через итератор. Т.е. такой же как и обычный перебор через итератор в цикле.
std::set можно сразу отбросить, т.к. по критериям отбора он явно подходит не лучше чем std::map.
Остаётся std::map и std::unordered_map...

Цитата Сообщение от valval Посмотреть сообщение
Основная операция - range-based for loop. (for (Element* e : m_elements) )
Очень редко будет использоваться - вставление элемента, почти никогда - получение элемента.
А основная операция (range-based for) как часто будет использоваться?
0
MrGluck
Модератор
Эксперт CЭксперт С++
7490 / 4605 / 691
Регистрация: 29.11.2010
Сообщений: 12,589
30.01.2014, 22:32 #6
std::unordered_map, но учесть, что последовательность может быть нарушена. Если оно важно, то
C++
1
std::vector<std::pair<std::string, Class*>>
Добавлено через 2 минуты
Но это если вставка будет производится чаще всего в конец.
Тут необходимо уточнение: как часто вставлять будете и куда, насколько часто нужен доступ к элементам и к каким конкретно?
1
valval
1 / 1 / 0
Регистрация: 29.01.2014
Сообщений: 30
30.01.2014, 22:58  [ТС] #7
- Не важен порядок
- Вставка будет только при инициализации "мира"
- Иттерация всех элементов будет очень проходить очень часто.
- Доступ к объекту по ключу - думаю никода.
0
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
30.01.2014, 23:01 #8
Цитата Сообщение от valval Посмотреть сообщение
Доступ к объекту по ключу - думаю никода.
а зачем тогда вообще ключ? используйте просто вектор тогда)
0
valval
1 / 1 / 0
Регистрация: 29.01.2014
Сообщений: 30
30.01.2014, 23:05  [ТС] #9
Цитата Сообщение от metaluga145 Посмотреть сообщение
а зачем тогда вообще ключ? используйте просто вектор тогда)
Все же нужен ключ, мало ли вдруг что изменится, и придется после этого долго отрефакторивать всё.
0
DiffEreD
1431 / 768 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
31.01.2014, 01:12 #10
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Картинка с хабра в тему:
8
Миниатюры
Какой STL-контейнер выбрать?  
zelim
77 / 77 / 4
Регистрация: 26.12.2011
Сообщений: 217
31.01.2014, 01:30 #11
Цитата Сообщение от valval Посмотреть сообщение
Иттерация всех элементов будет очень проходить очень часто.
У std::list, кстати, в отличие от других контейнеров, такие операции проходят за константное время, а не за O(log(n)). Схожа с ним и std::deque.
Остальные контейнеры не удовлетворяют этому критерию.
IMHO.
0
valval
1 / 1 / 0
Регистрация: 29.01.2014
Сообщений: 30
03.02.2014, 04:01  [ТС] #12
Цитата Сообщение от DiffEreD Посмотреть сообщение
Картинка с хабра в тему:
Эту картинку я видел давно, но там про итерацию не слова.
0
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
03.02.2014, 13:46 #13
valval, я бы взял вектор пар, быстрее для обхода всех элементов сложно что-то придумать.
0
03.02.2014, 13:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.02.2014, 13:46
Привет! Вот еще темы с ответами:

STL, контейнер set - C++
Помогите, пожалуйста. Задание состоит вот в чем: даны названия городов, и для них перечислены города, в которые можно попасть без...

STL контейнер ошибка компиляции - C++
#include &lt;iostream&gt; #include &lt;map&gt; #include &lt;iterator&gt; #include &lt;string&gt; using namespace std; int main() { string word; ...

STL контейнер. Не записывает int - C++
class book {int a;};//Конструктор есть и работает Допустим есть список list&lt;book&gt; lst; Передаём этот список функции, точнее ссылку на...

STL-контейнер.Переделать реализацию. - C++
Ребята, написал прогу, в которой контейнер типа вектор хранит данные класса банк, и проводит с ними дейтвия, сортировка, поиск, добавление,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru