Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 对std::map进行排序_C++_C++11 - Fatal编程技术网

C++ 对std::map进行排序

C++ 对std::map进行排序,c++,c++11,C++,C++11,我有一张时间戳地图和一些数据地图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"

我有一张时间戳地图和一些数据地图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

实际上,您很幸运,因为您的时间戳是Y-M-D H:M:S ISO 8601,时间排序顺序将与字符串排序顺序相同。因为std::string有一个操作符,所以您可以存储日期的64位表示形式,并使用它对项目进行排序,或者编写一个比较器,在比较之前将字符串转换为日期

希望对你很有用。

应该始终按以下顺序排列:

在内部,映射中的元素按照构造上设置的特定严格弱排序标准从低到高进行排序


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

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

#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;
  }
}

不要将时间戳存储为字符串。将其转换为正确的数字表示形式。您如何获得该输出?我想不出任何理由一张地图会按照你声称的顺序排列数据。std::map不是总是自动排序吗?@BrendanLong是的,但我的数据集没有排序没有,乔错了。ISO日期和时间格式设计为可排序为字符串。你什么都不用做!除非指定了比较运算符,否则它是按ASCII顺序排序的。但是,正如Benj所指出的,ASCII BETILY在这种情况下是正确的。@MaxLybbert是的,ISO 8601是专门为在这种情况下正确排序而设计的。
#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;
  }
}