0

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

QMAP<int, QVariant> grp;

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

在读取值时 -

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

4

4 回答 4

1

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

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

返回一个列表,其中包含与 key 关联的所有值,从最近插入到最近插入的值。

于 2014-09-23T09:16:33.863 回答
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'.
于 2014-09-23T09:16:43.397 回答
0

问题 - 如果多个键存储在同一个键中,则为同一个键添加的最后一个值将具有偏好。根据文档 - 返回一个列表,其中包含与键 key 关联的所有值,从最近插入到最近插入的值。

解决方案 - 要将其恢复为相同的形式 - 再次遍历 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;
            }

现在,当遍历和打印 pgrp 时,您将首先得到的打印是“HELLO”而不是 Hi。

于 2014-09-23T11:02:27.137 回答
0
QMultiMap<int, QVariant> grp;
grp.insertMulti(0, "HELLO");
QMultiMap<int, QVariant> map {{ 0, "HI" }};
grp = map.unite(grp);

QList<QVariant> vl = grp.values(0);
QString firstInserted = vl.last().toString();
于 2021-11-11T22:33:56.957 回答