2017-08-23 61 views
-5
//Works  
cout << "map[0] value is " << doubleStatsMap.begin()->first<< endl; 
//gives error 
cout << "map[last value is " << doubleStatsMap.end()->first << endl; 

我只是試圖獲取我的地圖的最後一個元素的值。它可以與 「map.begin-> first」 正常工作,但爲 「map.end() - > first」提供「map/set iterator not derefereenable」。 它不能爲空,因爲地圖有一個開始,因此它有一個結束。我讀過的所有內容都說這應該起作用。任何建議非常感謝!map.end()錯誤「迭代器不可解引用」C++

+2

文檔:http://en.cppreference.com/w/cpp/container/map/end – juanchopanza

+1

迭代形成半開區間...請再次閱讀迭代器的文檔。 – Rakete1111

+1

你正在考慮'back()',它返回最後一個元素的引用。 – genpfault

回答

2

試圖從結束迭代器中導致未定義的行爲。

要獲得最後一個項目,您可以使用std::map::rbegin()

// cout << "map[last value is " << doubleStatsMap.end()->first << endl; 
cout << "map[last value is " << doubleStatsMap.rbegin()->first << endl; 
+0

謝謝。我不在乎是否因爲問這個問題而陷入低報。我看到了結尾的例子,它讓我瘋狂。 – Mason

+0

那麼在end()中附加「first」和「second」函數有什麼意義呢?進一步說,即使有一個[命名不好的]結束函數,因爲無論如何map不能像索引數組一樣引用映射? – Mason

+0

@梅森,很好的問題。他們的答案很長,在SO評論中不合適。 –