我正在制作一个生成迷宫的程序,然后使用 bredth first search 在迷宫中找到一条路。我的检查容器类中是否存在元素的函数现在使用这样的向量(其中坐标路径是向量的 typedef):
bool Labyrinth::inVisited(const Coordinate &c, const coordinatePath &visited ) const
{
for each (Coordinate coord in visited)
{
if(coord == c)
return true;
}
return false;
}
由于如果元素不存在,此方法必须遍历整个容器,因此对于大型搜索非常无效。我尝试实现使用集合而不是向量的相同函数,并像这样编写它:
bool Labyrinth::inVisited(const Coordinate &c, const set<Coordinate> &visited ) const
{
return (visited.find(c) != visited.end());
}
当我尝试重新编译时,我得到了很多错误,其中最上面是
错误 22 错误 C2676: 二进制 '<' : 'const Coordinate' 未定义此运算符或转换为预定义运算符可接受的类型 c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstddef 193
我不太了解这些特定的调试消息,想知道是否有办法实现这种更快的搜索!