Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
ДЕСАНТУРА
6 / 6 / 5
Регистрация: 25.02.2015
Сообщений: 179
#1

Контейнер map с сохранением порядка вставки элементов - C++

13.07.2015, 17:08. Просмотров 561. Ответов 7
Метки нет (Все метки)

Можно ли в контейнере расположить ключи так, чтобы они не были отсортированы в порядке убывания или возрастания.
Например я ложу в контейнер такие ключи:
C++
1
2
3
4
map<string,string> st;
st.insert(make_pair("A","A1"));
st.insert(make_pair("C","C1"));
st.insert(make_pair("B","B1"));
Но "map" располагает ключи в алфавитном порядке автоматически, то есть:
C++
1
2
3
A:A1
B:B1
C:C1
А мне нужно чтобы ключи располагались именно в той последовательности, в которой я их туда положил, может есть другой контейнер для этого?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.07.2015, 17:08
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Контейнер map с сохранением порядка вставки элементов (C++):

Отсортировать контейнер map по значению элементов
Есть заполненный контейнер unordered_map (ну или просто map) Нужно...

Контейнер map. Осуществить ввод элементов и поиск по ключу
Поиск работает, но как сделать чтобы чтобы можно было вводить элементы с...

Возможно ли создать контейнер std::map, в котором в качестве значения была бы ссылка на std::map?
Здравствуйте. Возможно ли создать контейнер std::map, в котором в качестве...

Контейнер map ?
Не совсем удается разобраться Не удается разобраться с ассоциативными...

Контейнер map
Стоит задача реализовать контейнер map. Вопрос возникает при реализации...

Контейнер map
в программе используется ассоциативный массив, идентификатором которого...

7
Renji
2129 / 1488 / 453
Регистрация: 05.06.2014
Сообщений: 4,328
13.07.2015, 17:13 #2
Цитата Сообщение от ДЕСАНТУРА Посмотреть сообщение
А мне нужно чтобы ключи располагались именно в той последовательности, в которой я их туда положил, может есть другой контейнер для этого?
Можно все класть в вектор/список пар, но там поиска по ключу не будет. Так что, разве что писать свой контейнер.
0
Raali
639 / 343 / 74
Регистрация: 06.07.2013
Сообщений: 1,107
Завершенные тесты: 1
13.07.2015, 17:15 #3
Цитата Сообщение от ДЕСАНТУРА Посмотреть сообщение
может есть другой контейнер для этого?
unordered_map ?
0
CheshireCat
Эксперт С++
2907 / 1256 / 114
Регистрация: 27.05.2008
Сообщений: 3,451
13.07.2015, 17:15 #4
Смотри в документации: unordered_map
0
Renji
2129 / 1488 / 453
Регистрация: 05.06.2014
Сообщений: 4,328
13.07.2015, 17:16 #5
Цитата Сообщение от Raali Посмотреть сообщение
unordered_map ?
Он же сортирует ключи по их хешу. То есть, просто перемешивает в кашу. А ТС хотел сохранить порядок добавления.
2
DrOffset
7518 / 4514 / 1097
Регистрация: 30.01.2014
Сообщений: 7,362
13.07.2015, 17:17 #6
Лучший ответ Сообщение было отмечено ДЕСАНТУРА как решение

Решение

Цитата Сообщение от ДЕСАНТУРА Посмотреть сообщение
А мне нужно чтобы ключи располагались именно в той последовательности, в которой я их туда положил, может есть другой контейнер для этого?
Готовое есть в boost.

Можно сами элементы хранить в векторе (который сохранит порядок), а в map держать индексы этих элементов из вектора. При доступе по ключу получаем индекс, затем элемент из вектора. При обходе по порядку - пользуемся вектором. Но это от задачи зависит. Что там удаляется-добавляется в процессе и куда.
1
ct0r
Игогошка!
1784 / 686 / 43
Регистрация: 19.08.2012
Сообщений: 1,323
Завершенные тесты: 1
13.07.2015, 17:34 #7
Самое оптимальное - использовать boost::multi_index_container с двумя индексами - один по ключу, другой по порядку добавления.
1
ДЕСАНТУРА
6 / 6 / 5
Регистрация: 25.02.2015
Сообщений: 179
13.07.2015, 17:46  [ТС] #8
спасибо всем, буду использовать контейнер из буста
0
13.07.2015, 17:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.07.2015, 17:46
Привет! Вот еще темы с решениями:

Контейнер map
Cоздать ассоциативный список имен (ключей), телефонов. Осуществить поиск по...

контейнер map
Помогите, пожалуйста дописать программу. Определите карту, в которой ключом...

Контейнер map
подскажите пожалуйста, как можно заполнить контейнер map с клавиатуры ?

Контейнер map
Здравствуйте, работаю с контейнером map, анализирую текст, получаю записи типа...


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

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

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