无法从地图值获取对

dah*_*o37 3 c++ dictionary std std-pair

我有这个结构

static map<TypeA, pair<reference_wrapper<TypeB>, TypeC>> my_map;
Run Code Online (Sandbox Code Playgroud)

后来,我像这样访问它:

pair<reference_wrapper<TypeB>, TypeC> instance = my_map[type_a_instance];
Run Code Online (Sandbox Code Playgroud)

此错误会触发:

没有匹配的函数可用于调用 'std::pair<std::reference_wrapper< TypeB>, TypeC>::pair()'

joh*_*ohn 7

map::operator[]如果不存在键的映射,则必须默认构造映射中的对。这对于地图中的类型来说是不可能的,因为reference_wrapper. find代替使用。

pair<reference_wrapper<TypeB>, TypeC> instance = 
    my_map.find(type_a_instance)->second;
Run Code Online (Sandbox Code Playgroud)

at或者按照@Steve Lorimer的建议使用

pair<reference_wrapper<TypeB>, TypeC> instance = 
   my_map.at(type_a_instance);
Run Code Online (Sandbox Code Playgroud)

当然,两个版本都假设可以找到密钥。find如果找不到密钥,该版本会给出未定义的行为,该at版本会给出std::out_of_range异常。