提问人:dahko37 提问时间:3/7/2023 更新时间:3/7/2023 访问量:65
无法从地图值中获取配对
Can't get pair from map value
问:
我有这个结构
static map<TypeA, pair<reference_wrapper<TypeB>, TypeC>> my_map;
后来,我像这样访问它:
pair<reference_wrapper<TypeB>, TypeC> instance = my_map[type_a_instance];
此错误会触发:
调用“std::p air<std::reference_wrapper< TypeB>, TypeC>::p air()”没有匹配函数
答:
7赞
john
3/7/2023
#1
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
at
std::out_of_range
评论
0赞
Steve Lorimer
3/7/2023
或 .at
0赞
Remy Lebeau
3/8/2023
使用 时,只需在取消引用之前检查返回的迭代器是否有效,例如:std::map::find()
auto iter = my_map.find(type_a_instance); if (iter != my_map.end()) { auto &instance = iter->second; ... }
评论