有兩種方法,這取決於有多少項在地圖中。
如果地圖上的項目很少(如< 20),則可以使用map.key()
來搜索密鑰。這對所有項目執行線性搜索,並且由於這種搜索的O(N)複雜性,因此對於大型地圖將執行很差。
或者,您可以實現雙向映射。下面顯示的是一個非常簡單的變體,僅適用於不同的T1和T2。請注意,沒有非const索引操作符,因爲這兩個映射都需要修改。這將需要一個包裝類。
template <typename T1, typename T2> class BiMap {
QMap<T1, T2> m_map1;
QMap<T2, T1> m_map2;
public:
typedef QMap<T1, T2>::iterator iterator1;
typedef QMap<T1, T2>::const_iterator const_iterator1;
typedef QMap<T2, T1>::iterator iterator2;
typedef QMap<T2, T1>::const_iterator const_iterator2;
iterator1 insert(const T1 & key, const T2 & value) {
m_map2.insert(value, key);
return m_map1.insert(key, value);
}
iterator2 insert(const T2 & key, const T1 & value) {
m_map1.insert(value, key);
return m_map2.insert(key, value);
}
const T1 & operator[](const T1 & key) const {
return m_map1[key];
}
const T2 & operator[](const T2 & key) const {
return m_map2[key];
}
};
BiMap<int,QString> map;
map.insert(0x01, "HELLO");
map.insert(0x02, "FELLOW");
map.insert(0x83, "NESTLE");
map.insert(0x044, "KITKAT");
int key = map["NESTLE"];
爲什麼我們在這裏迭代?爲什麼不只是map.key(str); ? –
@SHREYASJOSHI,是啊:)比你自己的問題回答。 – vahancho