gpt4 book ai didi

c++ - 如何在C++中的二维数组中插入可变数量的数据

转载 作者:行者123 更新时间:2023-11-30 02:19:56 25 4
gpt4 key购买 nike

我有以下文件 input.txt,其中包含以下值:

0 0
0 1
0 2
0 3
1 1
1 4
2 1
2 4
2 3

我想将这些值插入到两个数组中。我希望它们最终看起来像这样。

0   0 1 2 3
1 1 4
2 1 4 3

第一个数组将包含 id,第二个数组将包含元素。我已经设法使用以下方法为这两个数组动态分配内存:

int n,m,i=0,tempNum,lines;
int NumberOfIds=0;
ifstream read("input2.txt");
while(read>>n>>m){
if (i==0){
tempNum=n;
}
if (tempNum != n){
NumberOfIds++;
}
tempNum = n;
i++;
}
lines=i-1;

//printf("%d", j);
int** idElements = new int*[NumberOfIds];
int* ids = new int[NumberOfIds];
int* numberOfIdElements = new int[NumberOfIds];

// Rewinds file
read.clear();
read.seekg(0, ios::beg);

int counter = 0;
NumberOfIds=0;
while(read>>n>>m){

if (tempNum != n){
numberOfIdElements[NumberOfIds] = counter;
NumberOfIds++;
counter = 0;
}
tempNum = n;
counter++;
i++;
}

for(int k = 0; k < NumberOfIds; ++k)
idElements[k] = new int[numberOfIdElements[k]];

现在我卡在如何插入数据上了。任何帮助将不胜感激。

最佳答案

你可以很容易地用 std::vector 做到这一点:

std::vector<std::vector<int>> arr;
while(read>>n>>m){
//if we're too small, push empty rows till we're big enough
while(n + 1 > arr.size()) {
arr.push_back(std::vector<int>());
}
arr.at(n).push_back(m); //push m onto row n
}

或者,如果您的第一列数字变大(因此您不想创建很多空行),您可以使用 std::map:

std::map<int, std::vector<int>> arr;
while(read>>n>>m){
//works because map subscript creates a key/val pair if one doesn't exist
//so if this row doesn't exist, we get a new vector to push_back to
arr[n].push_back(m); //push m onto row n
}

在此处查看实际效果:ideone

关于c++ - 如何在C++中的二维数组中插入可变数量的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50220063/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com