我有一个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。我怎么能这样做? 请不要在使用其他数据结构时给出答案。这是一个非常复杂问题的片段。
答案 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。