【问题标题】:How to get key from value in QMultiMap?如何从 QMultiMap 中的值中获取键?
【发布时间】:2019-11-06 12:48:20
【问题描述】:

我的 QMultiMap 如下:

QMultiMap <int, QString> paramIDMap, paramValueMap;

我的价值是“xyz”,我想把它作为关键。

例如:paramIDMap.getkey("xyz") 像这样

如何做到这一点?

预期的输出应该返回键。

【问题讨论】:

  • 哪个键? ____
  • 你不能。这不是地图的用途。关联容器不能以这种方式工作。可能有多个具有相同值的键。您唯一的选择是遍历地图中的所有键,并检查每个键的值,然后从那里找出要做什么。但是,如果您需要在映射中找到值的键,则意味着您使用了错误的容器。您不应该使用地图,而应该使用其他东西。你必须自己弄清楚你可以使用哪个容器来做你需要做的任何事情。
  • @LogicStuff 它是 hashmap,所以我们从它的值中检索 hashmap 键。以同样的方式这个 qmultimap 工作。所以我插入了类似 paramIDMap.insert(key,value); 的记录
  • @SamVarshavchik 好的,知道了

标签: qml qmultimap


【解决方案1】:

QMultiMap 旨在存储键值对,以便在键可以有多个值的情况下通过键快速查找。 从 QMap 继承的 QList QMap::keys(const T &value) const 方法将返回特定值的键的 QList。这不会是快速查找,时间复杂度将是线性的。

QMultiMap <int, QString> paramIDMap;
paramIDMap.insert(1,"a");
paramIDMap.insert(1,"b");
paramIDMap.insert(2,"a");
paramIDMap.insert(2,"b");
QList<int> ks = paramIDMap.keys("a");

其中ks 将包含 [1,2]。

【讨论】:

  • @cmhacker,只是另一个注意事项:每个类的 Qt 文档,如果该类是子类,则不会显示继承的方法和属性。您可以通过单击始终位于第一个表格下方的List of all members, including inherited members 链接找到它们。这似乎是你没有找到这个方法的原因。
猜你喜欢
  • 2021-07-22
  • 2018-02-04
  • 1970-01-01
  • 2021-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-13
  • 2016-09-06
相关资源
最近更新 更多