gpt4 book ai didi

c++ - std::pair 作为映射中的键

转载 作者:太空狗 更新时间:2023-10-29 20:58:23 24 4
gpt4 key购买 nike

我有一个很大的图像数据集,在每个图像捕获的特定时间拍摄 start_timestop_time已知并编码为 double 。我想根据模拟时间将每个连续图像加载到我的模拟中,即 - 检查当前模拟时间何时落在开始/停止间隔内。

我想为此使用一个 map ,其中的键是 std::pair<double, double>开始和停止时间,值是图像的完整路径。

std::map<std::pair<double, double>, std::string> _sequence; // t1, t2 and full path

我的问题:我如何搜索这样的 map 以查找 _currentTime 是否在间隔对内?

最佳答案

首先,不要使用 map键入 std::pair<double, double>如果搜索包容是您要做的主要事情。这不是对该数据结构有意义的操作。

但如果你坚持,代码看起来像这样(在 C++11 中):

bool isWithinInterval() const {
for (const auto& pr : _sequence) {
if (_currentTime >= pr.first.first && _currentTime <= pr.first.second) {
return true;
}
}
return false;
}

Pre-C++11,相同的想法,只是循环语法略有不同。理想情况下,我们会使用 std::find_if , 但是表达 map 的 value_type 很麻烦.但在 C++14 中,没有这样的麻烦:

auto it = std::find_if(_sequence.begin(),
_sequence.end(),
[_currentTime](const auto& pr) {
return _currentTime >= pr.first.first && _currentTime <= pr.first.second;
});
return it != _sequence.end();

或者只是:

return std::any_of(_sequence.begin(), _sequence.end(),
[_currentTime](const auto& pr) {
return _currentTime >= pr.first.first && _currentTime <= pr.first.second;
});

关于c++ - std::pair 作为映射中的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27807960/

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