как всегда размещать элементы в конце std::map?

#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;
 

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