排序标准::映射<字符串,双精度>
sorting a std::map<string,double>
我有一个时间戳图和一些数据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="answers"> 您可以存储日期的 64 位表示形式,并使用它来对项目进行排序或编写一个比较器,以便在比较之前将字符串转换为日期
希望对你有用。
相关文章:
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 正在将csv文件读取为双精度矢量
- 我可以信任表示整数的浮点或双精度来保持精度吗
- 如何在C++中的同一函数中使用字符串和双精度
- 特征::矩阵<双精度,1,3> 结构类型函数中的返回类型函数
- 检查是否以特定精度给出双精度
- 转换函数,将 std::数组的双精度作为参数或双精度作为参数单独转换
- C 字符串返回字符串的整数/双精度/长整型值
- 为什么将双精度转换为 int 似乎在第 16 位数字之后将其四舍五入?
- 如何使双精度值的 C++ 和 C# 中的结果相同
- 使用浮点数和双精度数的非常小数字的数学
- 使用 Xcode 将双精度存储在数组C++中
- 在 C++ 中将双精度变量写入二进制文件
- 如何从字符串转换为双精度*
- 为什么我的数组双精度函数不起作用?
- 高精度双精度的 Sprintf 格式化问题
- C++ cout 将双精度对齐到精度 2 并正确对齐
- 将指针数组分配给双精度
- C++如何将字符串逐行转换为双精度
- 长双精度C++是IEEE二进制128的实现吗?