访问QMap元素的值不是它的键

时间:2014-04-29 08:14:37

标签: c++ qt qmap

我希望通过它的值访问QMap,但我不想迭代它并找到具有相同值的元素并使用它的键, 无论如何要通过它的内容找到QMap键? 我的代码是:

    QMap<int, QVector<QString> >::iterator it;
QMap <QString, int> m_all_data;

我想访问m_all_data的元素,其值为iterator密钥;

3 个答案:

答案 0 :(得分:1)

您可以使用:

const Key QMap::key ( const T & value ) const 

返回值为值的第一个键或

QList<Key> QMap::keys ( const T & value ) const

以升序返回包含地图中所有键的列表。

但它很慢(线性时间),因为QMap的内部数据结构经过优化,可以按键快速查找,而不是按值。

答案 1 :(得分:0)

您可以使用QMap::valueshttp://qt-project.org/doc/qt-4.8/qmap.html#values)来获取值。

这将为您提供QList,您可以在其中进行迭代,对于给定的值,您可以使用QMap::keyhttp://qt-project.org/doc/qt-4.8/qmap.html#key)获取密钥以获取给定的密钥值。

答案 2 :(得分:0)

你可以维护第二个QMap,迭代器指向第一个映射,即

QMap<QString, int> m_all_data;
QMap<int, QList<QMap<QString, int>::iterator> > m_data_by_int;

请注意,每个int值都会映射到 迭代器列表,因为可能有多个映射条目具有相同的值。使用迭代器可以避免复制QString数据。你必须确保两张地图保持同步,所以最好将这两张地图包装成一个“双向地图”类。