在QMAP中使用insertMulti插入时如何反转相同键的顺序?

时间:2014-09-23 09:02:57

标签: qt qmap

我有一个QMAP数据结构。现在,我想在QMAP中插入QVariant类型。根据优先级插入数据。例如优先级1,2 ..等。 这些优先事项是QMAP的关键。但是,我可以使用相同的键值 - 意味着相同的优先级。这意味着优先级1,并且1可以具有不同的QVariants。为了满足这一点,我使用insertMulti而不是insert。现在,困难在于具有相同密钥的最后一个insertMulti被插入到先前插入值的顶部。现在,我怎样才能让它反转?

QMAP<int, QVariant> grp;

grp.insertMulti(0, "HELLO");
grp.insetMulti(0. "Hi");

阅读价值观 -

首先回复嗨。但是,我希望它返回HeLLO。我怎么能这样做? 请不要在使用其他数据结构时给出答案。这是一个非常复杂问题的片段。

3 个答案:

答案 0 :(得分:1)

如何将值存储在地图内部不是问题,而是如何在所需的“优先级”中检索它们。顺序。

正如您所说,根据优先级插入&#34;数据&#34;并且您希望以相同的顺序检索值,您可以使用文档所述的QMap::values(const Key & key) const函数: -

  

返回一个列表,其中包含与最近插入的最近插入的密钥相关的所有值。

答案 1 :(得分:0)

我会按以下方式进行:

QMap<int, QVariant> grp;

grp.insertMulti(0, "HELLO");
grp.insertMulti(0, "Hi");

QList<QVariant> vl = grp.values(0);
QString firstInserted = vl.last().toString(); // Returns the 'HELLO'.

答案 2 :(得分:0)

问题 - 如果多个密钥存储在同一个密钥中,则为同一个密钥添加的最后一个值将具有首选项。根据文档 - 返回一个列表,其中包含与最近插入的最近插入的密钥相关的所有值。

解决方案 - 将其恢复为相同的形式 - 再次遍历QMAP并将其插入另一个QMAP中。现在,与同一个键相关联的值将再次反转 - 基于最近访问的基本值将位于相同键值的顶部。

QMAP<int, QVariant> grp;

grp.insertMulti(0, "HELLO");
grp.insetMulti(0. "Hi");

解决方案

QMAP<int, QVariant> pgrp;

QMap<int, QVariant>::const_iterator pGroupServiceIterator = grp.constBegin();

while (pGroupServiceIterator != grp.constEnd())
            {
                   pgrp.insertMulti(pGroupServiceIterator.key(),pGroupServiceIterator.value());

               ++pGroupServiceIterator;
            }

现在,您将获得的印刷品是&#34; HELLO&#34;当pgrp被遍历和打印时,首先而不是Hi。