gpt4 book ai didi

c++ - 如何在C++中从文本文件中删除相似的值并将其分组?

转载 作者:行者123 更新时间:2023-12-02 10:19:49 24 4
gpt4 key购买 nike

说我有一个文本文件

200     34

34 377

20 2

34 45

200 7

10 63

并且我想以一种方式将其分组,使第一列的值不重复并且包含第2列的元素,如下所示:
200:  34  7


34 : 377 45


20: 2


10: 63

我该怎么做?我是一名初学者程序员,到目前为止,我仅设法读取文件并将其打印出来,就像使用
ifstream inFile;

inFile.open("textfile.txt");

if (inFile.fail()) {
cerr << "Error opeing a file" << endl;
inFile.close();
exit(1);
}
string line;

while (getline(inFile, line))
{
cout << line << endl;
}

inFile.close();

最佳答案

将输入读入多图,然后遍历输入的元素。

std::multimap<int, int> m;
int a, b;
while (inFile >> a >> b) {
m.insert(std::make_pair(a, b));
}
inFile.close();


for (auto it = m.begin(); it != m.end(); ) {
std::cout << it->first << ": ";
for (auto end = m.upper_bound(it->first); it != end; it++) {
std::cout << it->second << " ";
}
std::cout << "\n";
}

但是,考虑带有 vector 的 map 可能会更容易:
std::map<int, std::vector<int>> m;
int a, b;
while (inFile >> a >> b) {
m[a].push_back(b);
}
inFile.close();

for (auto i : m) {
std::cout << i.first << ": ";
for (auto j : i.second) {
std::cout << j << " ";
}
std::cout << "\n";
}

Tested on godbolt

您的输出似乎具有相反顺序的键,因此您可以将 rbeginrend与反向迭代器一起使用以遍历 map 。

关于c++ - 如何在C++中从文本文件中删除相似的值并将其分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60692404/

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