gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 01:34:29 25 4
gpt4 key购买 nike

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com