5

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

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

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

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

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

使用 QMap,项目总是按键排序

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

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

4

2 回答 2

6

从 Qt 文档中关于QMap::iterator

与 QHash 以任意顺序存储其项目不同,QMap 存储其项目按键排序。共享相同键的项目(因为它们是使用 QMap::insertMulti() 插入的,或者由于 unite())将连续出现,从最近插入的值到最近最少插入的值。

因此,似乎QMap保持了具有相同键的对的反向插入顺序。

于 2014-11-23T10:45:22.040 回答
0

有一个重载QMap::insertMulti(const_iterator pos, const Key &key, const T &value),其中pos是一个“提示”,您可以在要进行插入的集合中间传递constBegin()or或某个迭代器。constEnd()这是在您有重复键时指定顺序的方法。

我认为人们通常可以看到保留的订单就像是一个堆栈一样,这可能是幸运的......

于 2019-10-04T16:14:27.557 回答