我想使用QMultiMap
(派生自QMap
)来存储键/值对。由于我可以多次使用密钥,因此我更愿意使用QMultiMap
。
假设我将按给定顺序插入以下对:
"C" -> 5
"A" -> 10
"B" -> 77
"B" -> 1
"X" -> 314159
当迭代地图时(最好使用java风格的迭代器),我需要保留等密钥对的顺序。即迭代时,"B" -> 77
和"B" -> 1
应完全按插入顺序出现。不同密钥之间的顺序无关紧要。
不幸的是,文档没有说明这个细节。它说
使用QMap,项目始终按键排序
但它没有说明是否/如何对相同的键进行排序。
QMap
是否保留具有相同键的对的插入顺序,还是可以以某种方式保留?
答案 0 :(得分:4)
关于QMap::iterator
的Qt文档:
与QHash不同,后者以任意顺序存储其项目QMap 存储按键排序的项目。共享相同密钥的项目 (因为它们是使用QMap :: insertMulti()插入的,或者是由于 unite())将连续出现,从最近到 最近插入的值。
所以似乎QMap
保持对的反向插入顺序具有相同的键。
答案 1 :(得分:0)
有一个重载QMap::insertMulti(const_iterator pos, const Key &key, const T &value)
,其中pos
是一个“提示”,您可以在集合中间传递constBegin()
或constEnd()
或某个迭代器,其中您要插入。当您有重复的键时,这是指示顺序的方法。
我认为通常可以看到保留的顺序就像是堆栈一样,这可能是个运气。