排序标准::映射<字符串,双精度>



我有一个时间戳图和一些数据map<string,double> mymap;如何按时间戳对其进行排序,以便一切都按时间顺序排列?这是里面内容的示例数据集, 我有什么。

 < 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

您实际上很幸运,因为您的时间戳是 Y-M-D H:M:S (ISO 8601),时间排序顺序将与字符串排序顺序相同。 因此,由于std::string有一个operator<(),如果您遍历它,您的std::map将已经按日期顺序排列。 您所要做的就是填充地图,它将自行排序。

当然,以数字或日期对象格式(例如boost::posix_time::ptime)存储日期确实是一个好主意。 这肯定会在内存和处理方面提高性能,因为昂贵的字符串比较将被廉价的整数比较所取代。

std::map应始终排序:

在内部,map中的元素按照构造上设置的特定严格弱排序标准从低键值到高键值排序。

我唯一能想到的是它没有正确比较字符串。使用整数或旨在存储日期的格式可能会有所帮助。

只需按其自然顺序打印出来,如下所示:

#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;
  }
}
<</div> div class="one_answers">

您可以存储日期的 64 位表示形式,并使用它来对项目进行排序或编写一个比较器,以便在比较之前将字符串转换为日期

希望对你有用。

最新更新