2013-09-24 71 views
0
std::multimap<int, int> my_map; 
for(int i=0; i<10; ++i) 
{ 
    my_map.insert(std::pair<int, int>(i, i)); 
    my_map.insert(std::pair<int, int>(i, i)); 
} 

std::multimap<int, int>::iterator it(my_map.begin()); 
std::multimap<int, int>::iterator end(my_map.end()); 
for(; it!=end; ++it) 
{ 
    cout << it->first << " " << it->second << endl; 
} 

std::map<int, int>::iterator it(my_map.begin()); 
std::map<int, int>::iterator end(my_map.end()); 
for(; it!=end; ++it) 
{ 
    cout << it->first << " " << it->second << endl; 
} 

爲什麼兩個循環遍歷my_map產生相同的結果? std :: multimap :: iterator和std :: map :: iterator之間沒有區別嗎?std map和multimap迭代器是一樣的嗎?

+2

您的代碼有一個錯誤(迭代器類型和容器類型不匹配)。修復這個錯誤,這個謎將消失。理解錯誤代碼的行爲是非常非常困難的。 –

+0

@DavidSchwartz代碼編譯並運行良好。我想知道爲什麼它。 – Joshua

+1

它有一個錯誤。它不會像你期望的那樣行事。這就是錯誤的本質。修復這個錯誤,這個謎將消失。這就是爲什麼程序員盡力*避免*錯誤。 –

回答

0

編譯器上的std::multimapstd::map的實現很可能使用相同的迭代器,或者意外兼容的東西。那不是意味着這種行爲是有保證的。它可以在下一版本的編譯器中更改,更不用說使用其他編譯器。

0

迭代器是不一樣的,但我認爲排序是相同的。對於multimapmap,該元素按其按鍵排序。順序由其內部比較對象(比較類型)指示的特定嚴格弱排序標準確定。

在您的示例中,這兩個鍵的鍵順序相同。我想這就是爲什麼。

相關問題