我正在尝试调试一个图函数,该函数从一个顶点开始,通过FS(首次搜索(算法找到它后,在目标顶点结束。在调试模式下调用函数时,调试器会打开stl_map.h(我认为它这样做是因为图(顶点和边(已经在映射中实现。
该函数的参数为(map、startPerson、endPerson(。我传递了一张地图,两个人的参数如下(函数名为bfsFacebook(:
for (;;) {
cout << endl << "Enter the name of the starting person:n";
getline(cin, startingPerson);
if (IS_QUIT(startingPerson))
break;
if (everyone.count(startingPerson) == 0) {
cout << "Invalid starting name.";
continue;
}
cout << endl << "Enter the name of the ending person:n";
getline(cin, endingPerson);
if (IS_QUIT(endingPerson))
break;
if (everyone.count(endingPerson) == 0) {
cout << "Invalid ending name.";
continue;
}
//Breath-First search from starting node to end node (starting vertext to end vertex)
if (bfsFacebook(everyone, everyone[startingPerson], everyone[endingPerson]) == true) {
cout << "Path found between " << startingPerson << " and " << endingPerson << endl;
} else {
cout << "Path Not Found between " << startingPerson << " and " << endingPerson << endl;
}
}
cout << "Exiting..." << endl;
以下是实际功能:
bool bfsFacebook(map<string, Person> everyone, Person &startingPerson, Person &endingPerson) {
startingPerson.visited = true;
if (startingPerson.name == endingPerson.name && startingPerson.visited == true)
return true;
for (string somePerson : startingPerson.friends) {
if (everyone[somePerson].visited == false && bfsFacebook(everyone, everyone[somePerson], endingPerson)) {
return true;
}
}
return false;
}
为什么在调试过程中进入函数并不能将我发送到实际函数,有什么特殊的原因吗?
如果我的问题不够详细,请告诉我
呼叫线路:
bfsFacebook(everyone, everyone[startingPerson], everyone[endingPerson])
首先解析参数,然后用它们调用bfsFacebook
。
您有两个对map<string, Person>::operator[](const string&)
的调用,这两个调用将用于解析everyone[startingPerson]
和everyone[endingPerson]
,因此程序中执行的下一行是在std::map
中
map<Key, Value>::operator[](const Key&)
可能会根据构建进行优化,但在调试中,它更有可能出现在代码中。
由于std::map
已经由您自己的代码为<string, Person>
实例化,调试器没有理由不介入一个由您负责存在的函数。