0

値で QMap にアクセスしたいのですが、それを反復処理して同じ値の要素を見つけてそのキーを使用したくありません。コンテンツで QMap キーを見つける方法はありますか? 私のコードは:

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

キーの値で m_all_data の要素にアクセスしたいiterator;

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

最初のマップを指すイテレータを使用して 2 番目の QMap を維持できます。

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

同じ値を持つ複数のマップ エントリが存在する可能性があるため、各int値は反復子のリストにマップされることに注意してください。イテレータを使用すると、QStringデータの重複を回避できます。ただし、2 つのマップを同期させておく必要があるため、2 つのマップを「双方向マップ」クラスにラップすることをお勧めします。

于 2014-04-29T08:37:53.217 に答える