可以正确创建一个动态向量 <vector<pair<int, int>>> 名称;没有声明大小,然后添加项目?

Is possible to create correctly a dynamicly vector <vector<pair<int, int>>> name; without declare a size, and then add items?

我创建了一对向量的向量:

vector <vector<pair<int, int>> name;

接下来我需要向我的矢量添加值(使用此命令):

name[1].push_back(std::make_pair(2, 3));

但我收到错误消息:越界。我明白为什么,但我不知道是否可以在不声明向量大小的情况下动态创建此向量 "name"?我不能像这样声明向量的大小:

vector <vector<pair<int, int>> name(5);

因为我不知道,里面会有多少行。

解决我的问题的可能性有哪些?

我需要它,从图像中进行像素分割并创建片段列表,但我不知道有多少片段来自任何图像。

您需要先推回一个向量才能将一对推回:

name.push_back(vector<pair<int, int>>());

那么你可以name[0].push_back(std::pair(2, 3));

您可以在需要时调整大小:

int index = 1;
name.resize(std::max(name.size(), index + 1u);
name[index].push_back(std::make_pair(2, 3));

如果你的索引可能是稀疏的,std::map<int, std::vector<std::pair<int, int>>>可能是一个替代方案,你可以直接这样做:

name[index].push_back(std::make_pair(2, 3));

访问和显示名为 "name" 的地图内容的简单方法:

for (const auto & pair1 : name) {
    for (const auto & pair2 : pair1.second) {
        std::cout << "{" << pair2.first << ", " << pair2.second << "}, ";
    }
    std::cout << "\n";
}