如何便捷初始化std::pair<string, int>::second为0?是否需显式赋值?
问题解答
不需要为每个pair元素的int成员显式赋值0,有几种更便捷的实现方式:
1. 省略第二个初始化器,依赖值初始化
利用C++的值初始化规则,当仅为pair<const string, int>的第一个成员提供字符串时,第二个int成员会被自动初始化为0,写法更简洁:
vector<pair<const string, int>> v{ {"XXX"}, {"YYY"}, {"ZZZ"} };
2. 批量初始化(适合多元素场景)
如果需要初始化的键值对数量较多,可以先定义一个字符串集合,再通过循环批量构造vector元素,避免重复书写初始化逻辑:
const string keys[] = {"XXX", "YYY", "ZZZ"}; vector<pair<const string, int>> v; v.reserve(std::size(keys)); // 提前预留空间,减少扩容开销 for (const auto& key : keys) { v.emplace_back(key, 0); }
3. 用emplace_back动态构造
如果是动态添加元素,emplace_back可以直接在vector内部构造pair对象,无需创建临时pair:
vector<pair<const string, int>> v; v.reserve(3); v.emplace_back("XXX", int{}); v.emplace_back("YYY", int{}); v.emplace_back("ZZZ", int{});
关于你提到的「将0替换为{}无法解决问题」:正常情况下{"XXX", {}}是合法写法(int会被列表初始化为0),如果编译器报错,大概率是编译选项未开启C++11及以上标准,或者代码存在其他语法问题,建议检查编译参数是否指定了-std=c++11(或更高版本)。
内容的提问来源于stack exchange,提问作者Zhang
相关产品推荐
相关产品推荐

