无法从地图值中获取配对

Can't get pair from map value

提问人:dahko37 提问时间:3/7/2023 更新时间:3/7/2023 访问量:65

问:

我有这个结构

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()”没有匹配函数

C++ 字典 std-pair

评论


答:

7赞 john 3/7/2023 #1

map::operator[]如果不存在键的映射,则必须在映射中默认构造该对。对于地图中的类型,这是不可能的,因为 .请改用。reference_wrapperfind

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);

当然,这两个版本都假设可以找到密钥。如果找不到密钥,则该版本会为您提供未定义的行为,该版本会给出异常。findatstd::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; ... }