gpt4 book ai didi

c++ - 一个棘手的计数器 - 只是一个整数,但他不会按要求工作

转载 作者:太空狗 更新时间:2023-10-29 22:53:04 25 4
gpt4 key购买 nike

我必须为大学类(class)编写代码的程序即将结束,但我遇到了最后一个麻烦:格式化输出!

这与代码无关:这只是装饰品(但我需要解决这个问题,因为我的输出必须遵守某些标准)。

基本上,我的程序将读取 .csv 文件并通过将生成的图形划分为簇来处理该文件。我想让它们编号,无论如何(我不在乎它是否以 2 而不是 1 开头,只要数字是正确的即可)。问题是我不知道该怎么做 O-o

我已经有了一个合适的数据结构来处理我的聚类事件:图中的每个节点都指向某个列表。如果我有 n 个集群,我将有 n 个列表。这些列表在 Vertex 类中实例化,算法将在运行时合并它们,所以我不能像我想的那样简单地对它们进行编号,无论它们是在 vector 中还是其他东西中。

所以现在我有 n 个列表。我可以通过查看第一个顶点(它们在 vector V 中)并跟随指针轻松开始。这样做之后,我在第一个列表中。我可以继续它并获取它指向该列表的每个节点,并且我希望我的程序在 map 内的那个节点上放置一个“1”。然后我会在 V 内部寻找另一个顶点,其列表与之前不同,然后再次进入列表并保存带有“2”的节点,依此类推。

我的计数器无法正常工作:在 .csv 文件上请求 3 个簇,输出如下:

c 1 1
c 2 1
c 3 1
c 4 1
c 5 1
c 6 5
c 7 1
c 8 1
c 9 1
c 10 1
c 11 1
c 12 5
c 13 5
c 14 1
c 15 1
c 16 1
c 17 1
c 18 17
c 19 17
c 20 17
c 21 17
c 22 5
c 23 17
c 24 17
c 25 17
c 26 17
c 27 17
c 28 17
c 29 17
c 30 17
c 31 5
c 32 5

簇标签是 1, 5, 17 而不是 1, 2, 3 lol U_U

map<int, int> clusterProcessor(Grafo &G, map_t &Map, int clusters, vector<Vertex*> &V {
map<int, int> clustermap;
list<Vertex*>::iterator listiter;
int j;
int counter = 1;
for (j=1; j < V.size(); ++j) {
if (V[j]->getMyset()->front() != V[j-1]->getMyset()->front())
counter++;
for (listiter = V[j]->getMyset()->begin(); listiter != V[j]->getMyset()->end();
listiter++)
clustermap.insert(pair<int, int> ( (*listiter)->id, counter) );
}
return clustermap;
}

void clusterPrinter(map<int, int> m) {
map<int, int>::iterator i;
for (i = m.begin(); i != m.end(); i++)
cout << "c " << i->first << " " << i->second << endl;
}

最佳答案

请注意,数字始终是该行出现之前的行号。这表明 counter++ 一直在执行。

果然是。

也许您的意思是比较每个簇的第一个元素的值,而不是迭代器地址?

根据您建立的后续映射,我建议更改

if (V[j]->getMyset()->front() != V[j-1]->getMyset()->front() ) counter++;

if (V[j]->getMyset()->begin()->id != V[j-1]->getMyset()->begin()->id) counter++;

关于c++ - 一个棘手的计数器 - 只是一个整数,但他不会按要求工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3121378/

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