You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何便捷初始化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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 04:12:09