我正在尝试编写程序来对TSP进行强力解决方案,作为其中的一部分,我需要根据目标名称找到图形边缘。 r->destcity
和tofind->name
都是std::strings
,实际上相等的都是使用代码的另一部分中的输入使用相同的字符串进行分配。我的代码如下:
Edge findEdge(vector<Vertex>::iterator tofind){
for (vector<Edge>::iterator r = Edges.begin(); r < Edges.end(); r++){
cout << r->destcity << " " << tofind->name << " ";//This and the next
cout << ((r->destcity == tofind->name)?"True":"False") << endl; //line are for debugging
if (r->destcity == tofind->name)
return *r;
}
cerr << "Didn't find edge\n";
exit(200);
}
然而,尽管相同,但字符串永远不会相等。作为参考,这里是诊断cout输出:
New York New York False <- This should return true
Miami New York False
Seattle New York False
编辑:问题实际上并不是程序的这一部分,其中一个字符串前面是不可打印的字符。既然这是一个I / O问题,我会问一个单独的问题,如果我无法弄清楚为什么会发生这种情况。
答案 0 :(得分:3)
不是100%确定这是唯一的问题,但是您的迭代循环使用了错误的比较:
for (vector<Edge>::iterator r = Edges.begin(); r < Edges.end(); r++){
这不起作用,因为迭代器不一定是“按顺序”,即Edges.end()
不一定比那里的所有其他元素“更大”。
这将是正确的循环:
for (vector<Edge>::iterator r = Edges.begin(); r != Edges.end(); r++){
请注意,只要未到达结尾,就会使用运算符!=
进行循环。