2012-08-01 30 views
1

我正在使用我的程序中的地圖結構。結構的關鍵是時間戳。值不斷變化。我使用地圖的主要目的是確保所有值的表示和時間戳應該按照降序排列,就像最新的事件應該排在最前面一樣。但是,這沒有發生。這些值不是所需的(降序)順序。像地圖結構也支持排序嗎?

map<time_t, events> eventR; 
map<time_t, events>::iterator iterator; 

if the events are there { 
then iterator=eventR.begin(); 
for(iterator = eventR.begin(); iterator!=eventR.end(); ++iterator) 
{ 
//Display 
} 
} 

我已經宣佈的地圖結構這可能是因爲我已經明白地圖結構錯了,喜歡它沒有那種必要,但是,我想,如果我使用時間戳,以便數據將顯示根據最新的事件。我在這裏做錯了什麼?我是否必須使用不同的數據結構來獲得期望的結果?

感謝

+0

元素是* any *特定的順序,還是完全隨機? – 2012-08-01 22:46:33

+0

你指的是哪些元素?輸出? – 2012-08-01 22:48:04

回答

8

聲明地圖爲:std::map<time_t, events, std::greater<time_t>>。 (使用typedef以便更容易聲明迭代器。)

或者,使用rbegin()rend()反向重複地圖。

+0

我現在就試一試,但是你能否介紹一下如何根據最新的時間戳對它進行分類?謝謝! – 2012-08-01 22:49:12

+1

@UnderDog:「std :: map」的元素按鍵值排序。默認情況下,排序是根據'<謂詞完成的;用'std :: greater'代替'>'比較。您可以使用反向迭代器以相反順序遍歷映射,而不是顛倒排序順序。 – 2012-08-01 22:51:23

+0

kerrek - 當我使用rend時,它給出了一個錯誤,如「沒有操作符!=匹配這些操作數」。 – 2012-08-01 22:52:50

1

一個C++的std ::地圖確實保證一定的排序順序:

來自:http://www.cplusplus.com/reference/stl/map/

在內部,在地圖中的元件是由下分類到更高 密鑰值以下的特定嚴格建立在 建設上的弱排序標準。