无法从地图值中获取对

问题描述 投票:0回答:1

我有这个结构

static map<TypeA, pair<reference_wrapper<TypeB>, TypeC>> my_map;

后来我是这样访问的:

pair<reference_wrapper<TypeB>, TypeC> instance = my_map[type_a_instance];

此错误触发:

没有匹配函数调用'std::pair, TypeC>::pair()'

c++ dictionary std std-pair
1个回答
4
投票

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

pair<reference_wrapper<TypeB>, TypeC> instance = 
    my_map.find(type_a_instance)->second;

或按照@Steve Lorimer的建议使用

at

pair<reference_wrapper<TypeB>, TypeC> instance = 
   my_map.at(type_a_instance);

当然两个版本都假设可以找到密钥。如果找不到密钥,

find
版本会给您未定义的行为,第二个会给出
std::out_of_range
异常。

© www.soinside.com 2019 - 2024. All rights reserved.