値で QMap にアクセスしたいのですが、それを反復処理して同じ値の要素を見つけてそのキーを使用したくありません。コンテンツで QMap キーを見つける方法はありますか? 私のコードは:
QMap<int, QVector<QString> >::iterator it;
QMap <QString, int> m_all_data;
キーの値で m_all_data の要素にアクセスしたいiterator
;
以下を使用できます。
const Key QMap::key ( const T & value ) const
値 value または
QList<Key> QMap::keys ( const T & value ) const
これは、マップ内のすべてのキーを昇順で含むリストを返します。
ただし、QMap の内部データ構造は、値ではなくキーによる高速検索用に最適化されているため、低速です (線形時間)。
最初のマップを指すイテレータを使用して 2 番目の QMap を維持できます。
QMap<QString, int> m_all_data;
QMap<int, QList<QMap<QString, int>::iterator> > m_data_by_int;
同じ値を持つ複数のマップ エントリが存在する可能性があるため、各int
値は反復子のリストにマップされることに注意してください。イテレータを使用すると、QString
データの重複を回避できます。ただし、2 つのマップを同期させておく必要があるため、2 つのマップを「双方向マップ」クラスにラップすることをお勧めします。