背景:
我想用
std::pair
和
std::map
.
文件上说:
根据文件
map::find
我们知道:
返回值
对键等于键的元素的迭代器。如果没有这样的元素
找到,返回超过end(请参见end())的迭代器。
思想/逻辑
:
我有一个简单的程序:
代码
:
代码如下:
#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;
}
令人惊讶的是,这会返回输出,
二
零
这个
0
代表
State_Undefined
我想。这是令人惊讶的。因为哈希表中没有未定义的状态,所以我期望出现错误或警告,所以初始化了它。
注:
我知道,我应该检查迭代器
main()
这样的功能,就可以避免这种情况。
if (myMap.end() == myMap.find(InitStateAndTransition(nextState, testInput))) {
return -1;
}
问题
:
但是,我就是不明白,为什么
find()->second
可以返回
零
A.K.a枚举
未定义状态
. 我从未将该值放入哈希表中。