2014-04-29 3 views
0

QMap에 액세스하고 싶습니다.하지만 값을 반복하여 요소를 찾고 키를 사용하고 싶지 않습니다. 찾을 수있는 곳이 있습니다. 그것의 내용으로 QMap 키? 내 코드는 다음과 같습니다액세스 QMap 요소가 해당 값이 아닌 해당 값으로

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

내가 내 iterator 키의 값 m_all_data의 요소에 액세스 할;

+0

아니요, –

+0

[QMap에 삽입 된 문자열에서 해당 키 값을 찾는 방법]을 반복해야합니다 (http://stackoverflow.com/questions/21606159/how-to-find-the - 대응하는 키 - 값 - 문자열 - 삽입 된 - qmap으로) –

답변

0

당신은 사용할 수 있습니다 : 오름차순으로지도에있는 모든 키를 포함하는 목록을 반환하는 첫 번째 값 값 키 또는

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

을 반환

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

합니다.

그러나 QMap의 내부 데이터 구조가 값별로가 아닌 빠른 검색을 위해 최적화되어 있기 때문에 속도가 느립니다 (선형 시간). 첫 번째지도를 가리키는 반복자와 두 번째 QMap을 유지할 수

0

, 즉

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

같은 값을 여러 맵 항목이있을 수 있기 때문에 각 int 값이 반복자의 목록에 매핑하는 것을 주 . 이터레이터를 사용하면 QString 데이터를 복제하지 않아도됩니다. 두 맵을 동기화 된 상태로 유지해야하므로 두 맵을 '양방향 맵'클래스로 래핑하는 것이 가장 좋습니다.

관련 문제