Я делаю программу, которая создает лабиринт, а затем использует первый поиск бредта, чтобы найти способ в лабиринте. Моя функция, которая проверяет, является ли элемент присутствует в контейнере классе теперь использует вектор как это (где coordinatePath является ЬурейиМ для вектора):Как я могу создать функцию, которая находит объект в наборе?
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());
}
, когда я пытаюсь recomplie я получаю много ошибок, где верхний является
Ошибка 22 Ошибка C2676: двоичный '<': 'const Coordinate' не определяет этот оператор или преобразование в тип, приемлемый для предопределенного оператора c: \ program files (x86) \ microsoft visual studio 11.0 \ vc \ include \ xstddef 193
Я действительно не понимаю эти особые отладочные сообщения и задаюсь вопросом, есть ли способ реализовать этот быстрый поиск!
@MSalters Что с свободной 'оператора <'? – pmr
Большое спасибо за быстрый ответ! – Mattias
@pmr: 'Координата (0,0) <Координата (0,0)' была 'истина', которая нарушала требование строгого слабого порядка. В общем, все координаты были неравными даже для самих себя. Я изменил его, так что все координаты равны, что действительно. – MSalters