#c #c 14
#c #c 14
Вопрос:
Поэтому мне интересно, как я могу вставить элемент в конец std::map, или если есть аналогичная структура данных, которую я могу использовать, предпочтительно из STL.
Я пробовал:
map.insert(map.end(), элемент);
Но, похоже, он не всегда помещает элементы в правильном порядке.
Есть ли способ сделать это?
Комментарии:
1. Используйте
vector
иpush_back
.
Ответ №1:
std::map — это упорядоченный контейнер. элементы всегда будут вставляться в соответствии с порядком
Итератор, который вы передаете map::insert
, является просто подсказкой и не заставляет вставлять новый элемент в эту позицию в контейнере карты (элементы на карте всегда следуют определенному порядку в зависимости от их ключа).
если есть похожая структура данных, которую я могу использовать, предпочтительно из STL.
Похоже на что? Что вы хотите сделать со структурой данных?
Ответ №2:
как всегда размещать элементы в конце std::map?
Всегда вставляя элемент, который сравнивается выше, чем любой ранее существующий элемент.
Но, похоже, он не всегда помещает элементы в правильном порядке.
Элементы всегда будут в отсортированном порядке. Это «правильный» порядок для карты. Если это не «правильный» порядок для вас, то std::map не является правильным контейнером для вас.
Есть ли способ сделать это?
Не используется std::map.
если есть похожая структура данных, которую я могу использовать, предпочтительно из STL.
Зависит от того, насколько похожую структуру данных вы ищете. Вы можете вставлять элементы в произвольном порядке в std::vector .
Ответ №3:
Вероятно, лучшее, что можно сделать, это поместить элементы в вектор. А затем поместите ключ элемента и его индекс в карту.
std::map<string, std::size_type> idx_map;
std::vector elements;
elements.push_back(el_value);
std::size_type idx = elements.size();
idx_map[el_key] = idx;
чтобы перечислять по порядку, вы должны перечислять элементы, для поиска используйте карту, чтобы получить индекс значения, а затем получить его из вектора элементов