C++ 使用QPair和QString选择正确的数据结构

C++ 使用QPair和QString选择正确的数据结构,c++,qt,C++,Qt,我想存储QPair和QString,或者换句话说,我想为每个索引存储三个值(int、int、String)。为此,我选择了一个QMap,结果很好,其中QString作为键,QPair作为值 到目前为止,我只遍历了QMap,但是当我想查找其中一个键(QString)时,问题就出现了。当我使用myQMap.key(myQPair)时,返回的字符串是空的(我知道我想要的字符串不是空的) 所以问题是,我如何使用QPair作为参数来查找QString?QPair能作为钥匙工作吗?据我所知,这是行不通的。N

我想存储QPair和QString,或者换句话说,我想为每个索引存储三个值(int、int、String)。为此,我选择了一个QMap,结果很好,其中QString作为键,QPair作为值

到目前为止,我只遍历了QMap,但是当我想查找其中一个键(QString)时,问题就出现了。当我使用
myQMap.key(myQPair)
时,返回的字符串是空的(我知道我想要的字符串不是空的)


所以问题是,我如何使用QPair作为参数来查找QString?QPair能作为钥匙工作吗?据我所知,这是行不通的。

No
std::map
like对象可以使用该值作为键,这违背了它的目的


您需要的是一个
boost::bimap
();您想使用
QPair
作为键查找
QPair
,并且想使用
QPair
作为键查找
QString


Qt中没有提供此功能的类。因此,要么您必须自己实现(有许多方法),要么您可以使用

我通过创建两个映射解决了这个问题。

您的代码中有一个错误。虽然速度会很慢,但QMap应该能够很好地进行反向查找。您为
QMap::key
描述的行为只有在以下任一情况下才会发生:1。您没有值为myQPair或2的键值对。您错误地插入了一个键值对,其中的键值为空字符串,而myQPair.Hmm的值为空。我将调试它以查看。但只是澄清一下;是否可以使用QPair作为值/键查找QString?是的,可以。为QString和QPair定义了作为键所需的所有运算符。QMap的局限性在于,值到键的查找将花费线性时间(比值到键的查找日志(n)慢得多)。因此,如果您需要快速地在两个方向上进行查找,那么您需要不同的数据结构。因此,正确的答案是数据结构发生了变化。然而,驱使你切换这些东西的问题不是速度太慢,而是你的尝试根本不起作用。这表明您在描述的代码中做了一些错误的事情(因为您所描述的应该是有效的)。是的,您是对的。我用作论点的时间对是错误的。非常感谢。但此人正在使用Qt。@Bruce和Qt不支持该功能
Boost::bimap
是仅具有极为许可的头文件,有理由不使用它。