我正在编写一段代码,计算持续时间,然后将其保存在列表中。
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
但是运行上面的代码我得到以下错误:
这个错误很可能是因为我有一个空列表,其中没有任何项目。这就是为什么我想在第 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/