gpt4 book ai didi

c++ - std::multimap::rbegin 指向 MSVS-13 中的 end()?

转载 作者:行者123 更新时间:2023-11-30 04:55:58 25 4
gpt4 key购买 nike

我遇到了一个特殊问题,我的团队担心使用 std::chrono。

我们正在使用 MSVS-13,所以是 C++11。

我有一组对象状态存储在多映射中,以 std:chrono::milliseconds 为键。我想在 map 中找到最后一次(最大持续时间键值)。显而易见的答案是使用 rbegin():

class ObjectState{};
typedef std::multimap<std::chrono::milliseconds, ObjectState> MapType
main()
{
MapType stateMap;

// add some states

// read the last time
std::chrono::milliseconds lastTime = stateMap.rbegin()->first;
}

但在我的构建中,这个核心。查看调试器,rbegin() 似乎指向映射后的无效位置,就像 end() 应该的那样。

而且我确认递增 rbegin() 返回的迭代器确实到达了 map 中的最后一项。

我读到的所有内容都说它不应该那样做,如果我用“double”而不是“std::chrono::milliseconds”键控 map ,那么 rbegin()->first 给出最大时间,因为我' d期待。

std::chrono 和 std::multimap 不兼容有什么原因吗?

最佳答案

std::chrono::milliseconds lastTime = stateMap.rbegin()->first;

这会导致未定义的行为,如果:

  1. stateMap 为空

  2. 有人修改了 stateMap 中的数据,改变了它的顺序。

  3. 程序中任何地方的任何人在这行代码之前或之后已经执行或将执行未定义的行为。

否则,它返回存储在stateMap中的最大键值。

关于c++ - std::multimap<std::chrono::milliseconds, T>::rbegin 指向 MSVS-13 中的 end()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52823217/

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