0

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

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

我想用我的iterator键值访问 m_all_data 的元素;

4

3 回答 3

2

您可以使用:

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

它返回第一个具有值 value 的键或

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

它返回一个列表,其中包含按升序排列的映射中的所有键。

但它很慢(线性时间),因为 QMap 的内部数据结构针对通过键而不是按值快速查找进行了优化。

于 2014-04-29T08:26:35.217 回答
0

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

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

于 2014-04-29T08:17:49.670 回答
0

您可以使用指向第一个地图的迭代器维护第二个 QMap,即

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

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

于 2014-04-29T08:37:53.217 回答