我有一张时间戳和一些数据map<string,double> mymap;
的地图我怎样才能按时间戳对它进行排序,以便所有内容都按照chrnological的顺序排列?
下面是一个里面的样本数据集,
我有什么。
< timestamp , data>
"2011-02-04 14:14:51" 1
"2010-09-24 07:45:13" 2
"2011-10-28 11:10:32" 3
"2008-10-27 11:10:32" 4
"2008-10-27 11:10:33" 5
期望的结果
"2008-10-27 11:10:32" 4
"2008-10-27 11:10:33" 5
"2010-09-24 07:45:13" 2
"2011-02-04 14:14:51" 1
"2011-10-28 11:10:32" 3
答案 0 :(得分:8)
你真的很幸运,因为你的时间戳是Y-M-D H:M:S(ISO 8601),时间排序顺序与字符串排序顺序相同。因为std::string
有一个operator<()
,如果您遍历它,std::map
已经按日期顺序排列。你所要做的就是填写地图,它将自行订购。
当然,以数字或日期对象格式(例如boost::posix_time::ptime
)存储日期确实是个好主意。无论是在内存还是处理方面,这肯定会更高效,因为昂贵的字符串比较将被廉价的整数比较所取代。
答案 1 :(得分:3)
答案 2 :(得分:2)
按照自然顺序打印出来,如下:
#include <map>
#include <iostream>
int main () {
std::map<std::string, double> map;
map["2011-02-04 14:14:51"] = 1;
map["2010-09-24 07:45:13"] = 2;
map["2011-10-28 11:10:32"] = 3;
map["2008-10-27 11:10:32"] = 4;
map["2008-10-27 11:10:33"] = 5;
std::map<std::string, double>::iterator it(map.begin()), end(map.end());
while(it != end) {
std::cout << '"' << it->first << '"' << " " << it->second << "\n";
++it;
}
}
答案 3 :(得分:1)
您可以存储64位日期表示,并使用它来对项目进行排序或编写比较器,以便在比较之前将字符串转换为日期
希望对你有用。