2015-04-23 99 views
1

我想在C++中使用unordered_map,因此,對於密鑰我有一個int,而對於該值則有一對浮點數。但是,我不確定如何訪問這對值。我只是想弄明白這個數據結構。我知道要訪問我們需要的iterator這個無序的映射聲明的相同類型的元素。我嘗試使用iterator->second.firstiterator->second.second。這是做訪問元素的正確方法嗎?unordered_map對值C++

typedef std::pair<float, float> Wkij; 
tr1::unordered_map<int, Wkij> sWeight; 
tr1::unordered_map<int, Wkij>:: iterator it; 
it->second.first  // access the first element of the pair 
it->second.second // access the second element of the pair 

感謝您的幫助和時間。

+3

它編譯? –

+1

'unordered_map'是C++ 11標準的一部分,你可以使用'std ::'而不是'tr1 ::' – Alejandro

+1

你也可以使用'std :: get <0>(it-> second)'或' std :: get <0>(std :: get <1>(* it))'(都給出了它 - > second.first,這是完全有效的) –

回答

2

是的,這是正確的,但不要使用tr1,請寫std,因爲unordered_map已經是STL的一部分。基於範圍

就像你使用迭代說

for(auto it = sWeight.begin(); it != sWeight.end(); ++it) { 
    std::cout << it->first << ": " 
       << it->second.first << ", " 
       << it->second.second << std::endl; 
} 
在C++ 11可以使用

也爲循環

for(auto& e : sWeight) { 
    std::cout << e.first << ": " 
       << e.second.first << ", " 
       << e.second.second << std::endl; 
} 

如果你需要它,你可以用std::pair這樣

工作
for(auto it = sWeight.begin(); it != sWeight.end(); ++it) { 
    auto& p = it->second; 
    std::cout << it->first << ": " 
       << p.first << ", " 
       << p.second << std::endl; 
} 
+0

謝謝@NikolayKondratyev。這非常有幫助! – TMath