C++如何调用匿名对象成员函数避免插入map时使用set临时变量?
编译失败原因
std::set::insert 方法的返回值为 std::pair<iterator, bool> 类型,而非 std::set 对象本身,因此你尝试把 insert 的返回值作为 pair 的第二个参数传入时,会出现类型不匹配的编译错误。
无临时变量的实现方式
1. 初始化列表构造(最推荐,C++11及以上支持)
直接通过初始化列表构造匿名 std::set 对象即可,写法非常简洁:
my_map.insert(make_pair(my_int1, set<int>{my_int2}));
如果使用 C++17 及以上版本,支持类模板实参推导,还可以进一步简化:
my_map.insert(make_pair(my_int1, set{my_int2}));
2. emplace 直接构造(性能更优,也满足无临时变量要求)
直接调用 map 的 emplace 方法,在容器内部直接构造 pair 对象,不需要额外构造临时的 pair 和 set:
my_map.emplace(my_int1, std::initializer_list<int>{my_int2});
内容的提问来源于stack exchange,提问作者Crusader370
相关产品推荐
相关产品推荐

