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

为何无法通过v.push_back(vector<pair<int,string>>({1,"A"}))插入pair元素?

问题原因
  • 你尝试用vector<pair<int,string>>({1,"A"})创建子vector时,初始化列表里的1,"A"是两个独立的基础类型值(int和string),但目标vector的元素类型是pair<int,string>,编译器无法自动将这两个单独的值组合成一个pair对象来匹配vector的元素要求,因此会触发编译错误。
  • 而vector<pair<int,string>>({})是合法的,因为空初始化列表会直接构造一个空的vector,完全符合vector的默认构造规则。
解决方案

以下几种写法都能正确创建包含单个pair元素的子vector并插入到容器v中:

  1. 显式构造pair作为vector的元素
    给pair套一层大括号,让编译器识别这是一个pair类型的元素:

    v.push_back(vector<pair<int,string>>({{1,"A"}}));
    

    或者用make_pair显式生成pair对象:

    v.push_back(vector<pair<int,string>>({make_pair(1,"A")}));
    
  2. 使用emplace_back简化写法
    利用emplace_back直接在容器内构造子vector,省略外层的vector显式构造:

    v.emplace_back({{1,"A"}});
    
  3. 分步创建子vector再插入
    先单独创建子vector并添加元素,再插入到外层容器:

    vector<pair<int,string>> sub_vec;
    sub_vec.emplace_back(1, "A"); // 或者 sub_vec.push_back({1,"A"});
    v.push_back(sub_vec);
    
修改后的完整代码示例
#include<bits/stdc++.h>
using namespace std;

void printVec(vector<pair<int,string>> &v){
    cout << "Size: " << v.size() << endl;
    for(int i=0; i<v.size(); i++)
    {
        cout << v[i].first << " " << v[i].second << endl;
    }
}

int main()
{
    vector<vector<pair<int,string>>> v;

    int N;
    cin >> N;
    for(int i=0; i<N; i++)
    {
        int n;
        cin >> n;
        v.push_back(vector<pair<int,string>>({}));
        for(int j=0; j<n; j++)
        {
            int x;
            string s;
            cin >> x >>s;
            v[i].push_back({x,s});
        }
    }

    // 替换成正确的插入语句
    v.push_back(vector<pair<int,string>>({{1,"A"}})); 

    for(int i=0; i<v.size(); i++)
    {
        printVec(v[i]);
    }
}

内容的提问来源于stack exchange,提问作者Amar Naskar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 05:40:20