【发布时间】:2012-08-16 06:49:35
【问题描述】:
我想存储一个 QPair 和 QString,或者换句话说,我想为每个索引存储三个值(int、int、String)。为此,我选择了一个 QMap,它运行良好,其中 QString 作为键,QPair 作为值。
到目前为止,我只遍历了 QMap,但是当我想查找其中一个键(QString)时,问题就出现了。当我使用myQMap.key(myQPair) 时,返回的字符串是空白的(我知道我想要的字符串不是空白的)。
所以问题是如何仅使用 QPair 作为参数来查找 QString? QPair 可以作为关键吗?据我了解,这是行不通的。
【问题讨论】:
-
您的代码有错误。虽然它会很慢,但 QMap 应该能够很好地进行反向查找。您为
QMap::key描述的行为仅在以下情况下才会发生:1. 您没有具有 myQPair 值的键值对,或 2. 您错误地插入了一个带有空白字符串的键值对键和 myQPair 的值。 -
嗯,好的。我会调试一下看看。但只是为了澄清;是否可以使用 QPair 作为值/键来查找 QString?
-
是的,有可能。为 QString 和 QPair
定义了作为键的所有必要运算符。 QMap 的限制是值到键的查找将花费线性时间(比键到值查找的 log(n) 慢得多)。因此,如果您需要在两个方向上快速查找,则需要不同的数据结构。 -
因此,建议数据结构发生变化的答案是正确的。然而,促使你切换这些东西的问题不是它太慢,而是你的尝试根本没有奏效。这表明您在所描述的代码中做错了什么(因为您所描述的应该起作用)。
-
是的,你是对的。我用作论据的时间对是错误的。谢谢!