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()'
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
异常。
归档时间: |
|
查看次数: |
71 次 |
最近记录: |