c++ - 如何在 C++ 中声明 std::chrono::duration<double> 变量

标签 c++ list time c++-chrono

我正在编写一段代码,计算持续时间,然后将其保存在列表中。

auto start_time = std::chrono::high_resolution_clock::now();
/*
 *some code here
*/
auto finish_time = std::chrono::high_resolution_clock::now();

std::chrono::duration<double> time_duration = finish_time - start_time ;

现在我需要保存 time_duration在给定索引的列表中。如果给定的索引已经包含一个值,我需要添加 time_duration使用该索引的当前值并保存它。为此,我有以下列表和代码:

list <std::chrono::duration<double>> dTimeList;

auto iter = dTimeList.begin();
advance(iter, 0);  
*iter+= time_duration; //Error at this line

但是运行上面的代码我得到以下错误:

enter image description here

这个错误很可能是因为我有一个空列表,其中没有任何项目。这就是为什么我想在第 0 个索引处添加一个项目,如下所示:

auto itr = dTimeList.begin();
advance(itr, 0);
std::chrono::duration<double> t = 0.0;
dTimeList.insert(itr, t);

但上面也给出了下面的错误。我该如何解决这个问题。谢谢

No suitable constructor available to convert double to std::chrono::duration<double>

最佳答案

可能您不应该使用列表在索引处存储数据。尝试改用 std::unordered_map

#include <unordered_map>
auto start_time = std::chrono::high_resolution_clock::now();
/*
 *some code here
*/
auto finish_time = std::chrono::high_resolution_clock::now();
std::chrono::duration<double> time_duration = finish_time - start_time ;

typedef int YourObjectIdType;

std::unordered_map<YourObjectIdType, std::chrono::duration<double>> dTimes;

现在像这样插入或更新项目:

dTimes[objectId] += time_duration;

或者像这样:

 auto it = dTimes.find(objectId);
 if (it != dTimes.end()) {
      *it += time_duration;
 } else {
      dTimes.insert(std::make_pair(objectId, time_duration));
 }

另外,你可以用同样的方式使用std::map,它稍微慢一点,但是[begin(), end() ) 范围被排序。

关于c++ - 如何在 C++ 中声明 std::chrono::duration<double> 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56275395/

相关文章:

c++ - 关闭管道时收到双重释放或损坏(顶部)?

Python:类型错误:文本必须是 unicode 或字节

jquery - 动态填充列表 (jQuery)

php - 将小时 :Minute:Second. 转换为秒

c++ - 使用 GL_TEXTURE_MIN_FILTER GL_LINEAR 渲染效果不佳

c++ - 我应该更改函数参数的值吗?

java - 如果 key1 具有相同的值,如何按 key1 降序和 key2 升序对 List<Map<String,String>> 进行排序

Python获取文件的最后一次读取时间

将毫秒转换为 time_t

c++ - 如何在 C++ 中更改拉丁 UTF-8 字符串的大小写?