2016-05-27 30 views
0

我有嵌套類型的地圖。 我有一個數組,我需要使用2個屬性對數據進行排序。第一個屬性是第一個鍵的整數,第二個屬性是一個指針,它是主映射中嵌套映射的關鍵。所以我的代碼是這樣的:替代嵌套地圖在標準命名空間

iterator = outermap.find(); 
if(iterator!=outermap.end()){ 
    value = iterator->second; 
    it1 = value.find(); 
    if(it1!=value.end(){ 
     value1 = it1->second; 
     // do something 
    } 
    else{ 
     // do something and add new value 
    } 
} 
else { 
    // do something and add the values 
} 

這真的很慢,導致我的應用程序丟幀率。除此之外還有其他選擇嗎?我們可以使用哈希代碼和鏈表來實現相同嗎?

+0

你能解釋一下你的情況嗎?迭代映射不需要'if's。有多少元素?你需要他們訂購嗎? [MCVE]? – Mat

+0

@Mat讓我知道你是否需要更多信息。 – debonair

回答

3

你可以使用std :: unordered_map,它會散列鍵,使查找更快完成。使用value = iterator->second正在將整個地圖複製到「值」變量。使用參考可避免不必要的複製,對性能更好,例如:auto & value = iterator->second

此外std :: map保證爲ordered。這可以用於你的優勢,因爲你的鍵是最外面的地圖的整數。

2

首先,你的問題有點含糊,所以這可能會或可能不適合你的問題。

現在,你有一個map<int, map<pointer, pointer>>,但你永遠不會在內部地圖上操作。你所要做的就是通過intpointer查找一個值。這也正是你應該做的,使用這兩者的集合作爲地圖中的關鍵字。這種類型是pair<int, pointer>,地圖然後變成map<pair<int, pointer>, pointer>

還有一點需要注意:您似乎知道要提前在地圖中搜索的鍵。如果檢查元素是否存在不僅僅是爲了安全,還可以使用地圖的超載operator[]。查找然後變成outermap[ikey][pkey]並返回一個默認初始化的pointer(所以可能是一個空指針,它實際上是一個指針)。對於建議的組合地圖,查找將是outermap[make_pair(ikey, pkey)]