我希望通过它的值访问QMap,但我不想迭代它并找到具有相同值的元素并使用它的键, 无论如何要通过它的内容找到QMap键? 我的代码是:
QMap<int, QVector<QString> >::iterator it;
QMap <QString, int> m_all_data;
我想访问m_all_data的元素,其值为iterator
密钥;
答案 0 :(得分:1)
您可以使用:
const Key QMap::key ( const T & value ) const
返回值为值的第一个键或
QList<Key> QMap::keys ( const T & value ) const
以升序返回包含地图中所有键的列表。
但它很慢(线性时间),因为QMap的内部数据结构经过优化,可以按键快速查找,而不是按值。
答案 1 :(得分:0)
您可以使用QMap::values
(http://qt-project.org/doc/qt-4.8/qmap.html#values)来获取值。
这将为您提供QList
,您可以在其中进行迭代,对于给定的值,您可以使用QMap::key
(http://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
数据。你必须确保两张地图保持同步,所以最好将这两张地图包装成一个“双向地图”类。