QMap和QMultiMap中的项目顺序

时间:2014-11-23 09:44:26

标签: qt qmap qmultimap

我想使用QMultiMap(派生自QMap)来存储键/值对。由于我可以多次使用密钥,因此我更愿意使用QMultiMap

假设我将按给定顺序插入以下对:

"C" -> 5
"A" -> 10
"B" -> 77
"B" -> 1
"X" -> 314159

当迭代地图时(最好使用java风格的迭代器),我需要保留等密钥对的顺序。即迭代时,"B" -> 77"B" -> 1应完全按插入顺序出现。不同密钥之间的顺序无关紧要。

不幸的是,文档没有说明这个细节。它说

  

使用QMap,项目始终按键排序

但它没有说明是否/如何对相同的键进行排序。

QMap是否保留具有相同键的对的插入顺序,还是可以以某种方式保留?

2 个答案:

答案 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()或某个迭代器,其中您要插入。当您有重复的键时,这是指示顺序的方法。

我认为通常可以看到保留的顺序就像是堆栈一样,这可能是个运气。