gpt4 book ai didi

c++ - std::map 中的 find() 函数返回一个值,尽管没有有效的键

转载 作者:行者123 更新时间:2023-11-27 22:36:00 88 4
gpt4 key购买 nike

<分区>

背景:我想使用 std::pairstd::map 创建一个状态图。

文档说:

根据 map::find 的文档,我们知道:

Return value

Iterator to an element with key equivalent to key. If no such element is found, past-the-end (see end()) iterator is returned.

想法/逻辑:

我有这个简单的程序:

  • 有两个枚举 -
    • 各州和,
    • 一个用于过渡,
  • map 一起使用。

  • map 中的key 是一个std::pair由初始状态和转换组成。

  • 在上面的key上应用find,我们可以得到下一个状态。

代码:

代码如下:

#include <utility>
#include <map>
#include <iostream>

typedef enum {
State_Undefined = 0,
State_NotConnected = 1,
State_Transporting = 2,
State_TransportFinished = 3,
State_TransportStopped = 4
} State;
typedef enum {
Transition_Undefined = 0,
Transition_StopTransport = 1,
Transition_StartTransport = 2,
Transition_FinishTransport = 3
} Transition;

typedef std::pair<const State, const Transition> InitStateAndTransition;
typedef std::map<InitStateAndTransition, State> NextStateFromCurrentStateAndTransition;

NextStateFromCurrentStateAndTransition myMap = {
{{State_NotConnected, Transition_StartTransport}, State_Transporting},
{{State_Transporting, Transition_StopTransport}, State_TransportStopped},
{{State_TransportStopped, Transition_FinishTransport}, State_TransportFinished},
{{State_TransportStopped, Transition_StartTransport}, State_Transporting}
};

int main()
{
State currentState = State_NotConnected;

Transition testInput = Transition_StartTransport;
State nextState = myMap.find(InitStateAndTransition(currentState, testInput))->second;
std::cout << nextState << std::endl;

testInput= Transition_StartTransport;
nextState = myMap.find(InitStateAndTransition(nextState, testInput))->second;
std::cout << nextState << std::endl;
return 0;
}

令人惊讶的是,这会返回输出,

2

0

0 代表 State_Undefined,我猜。这令人惊讶。我本来以为会出现错误或警告,因为哈希表中没有 State_Undefined,所以我进行了初始化。

注意:

我明白了,我应该像这样检查main()函数中的迭代器,这样就可以避免这种情况。

    if (myMap.end() == myMap.find(InitStateAndTransition(nextState, testInput))) {
return -1;
}

问题:

但是,我只是不明白,find()->second 如何或为什么可以返回 0 a.k.a 枚举 State_Undefined .我从不将该值放入哈希表中。

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