Заказ товаров в QMap и QMultiMap
Я хотел бы использовать QMultiMap
(который получен из QMap
) хранить пары ключ / значение. Поскольку я могу иметь ключи несколько раз, я бы предпочел использовать QMultiMap
,
Предположим, я бы вставил следующие пары в указанном порядке:
"C" -> 5
"A" -> 10
"B" -> 77
"B" -> 1
"X" -> 314159
При итерации по карте (предпочтительно с использованием итераторов в стиле java) мне нужно сохранить порядок пар равных ключей. Т.е. "B" -> 77
а также "B" -> 1
должен появляться точно в порядке вставки при итерации. Порядок между разными ключами не имеет значения.
К сожалению, документация ничего не говорит об этой детали. Это говорит
С QMap элементы всегда сортируются по ключу
но он не говорит, если / как он сортирует равные ключи.
Есть ли QMap
сохранить порядок вставки пар с одинаковыми ключами или это можно каким-то образом сохранить?
1 ответ
Из документации Qt о QMap::iterator
:
В отличие от QHash, который хранит свои элементы в произвольном порядке, QMap хранит свои элементы, упорядоченные по ключу. Элементы, которые используют один и тот же ключ (потому что они были вставлены с использованием QMap::insertMulti() или из-за unite()), будут отображаться последовательно, от самого последнего до наименее недавно вставленного значения.
Так что кажется, что QMap
сохраняет обратный порядок вставки пар с равными ключами.
Есть перегрузка QMap::insertMulti(const_iterator pos, const Key &key, const T &value)
, где pos
это "подсказка" и вы можете передать constBegin()
или constEnd()
, или какой-нибудь итератор в середине коллекции, куда вы хотите сделать вставку. Это способ диктовать порядок, когда у вас есть повторяющиеся ключи.
Я думаю, что это может быть удачей, что в целом можно увидеть сохраненный порядок, как если бы это был стек...