2012-08-01 65 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/

在内部,在地图中的元件是由下分类到更高 密钥值以下的特定严格建立在 建设上的弱排序标准。