我想通过它的值访问 QMap,但我不想迭代它并找到具有相同值的元素并使用它的键,无论如何可以通过它的内容找到 QMap 键?我的代码是:
QMap<int, QVector<QString> >::iterator it;
QMap <QString, int> m_all_data;
我想用我的iterator
键值访问 m_all_data 的元素;
您可以使用:
const Key QMap::key ( const T & value ) const
它返回第一个具有值 value 的键或
QList<Key> QMap::keys ( const T & value ) const
它返回一个列表,其中包含按升序排列的映射中的所有键。
但它很慢(线性时间),因为 QMap 的内部数据结构针对通过键而不是按值快速查找进行了优化。
您可以使用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)获取密钥来获取密钥对于给定的值。
您可以使用指向第一个地图的迭代器维护第二个 QMap,即
QMap<QString, int> m_all_data;
QMap<int, QList<QMap<QString, int>::iterator> > m_data_by_int;
请注意,每个int
值都将映射到迭代器列表,因为可能有多个具有相同值的映射条目。使用迭代器可以避免重复QString
数据。不过,您必须确保使两张地图保持同步,因此最好将这两张地图包装到“双向地图”类中。