Я относительно новичок в языке C ++ и пытаюсь реализовать функцию сортировки из библиотеки алгоритмов, определенной в стандартном пространстве имен, и напрямую использовать std :: sort. Общая структура для сортировки вектора с использованием сортировки задается с использованием итератора и функции сравнения.
Рассмотрим вектор v as {4,3,5,9}
, и после сортировки он будет выглядеть как {9,5,4,3}.
Для экземпляра
std::sort(v.begin(),v.end(),a>b)
Итак, я хотел использовать этот метод для сортировки списка узлов на основе значения heuristi c для моего алгоритма поиска A *. Heuristi c - это в основном добавление 2 атрибутов объекта Node, и операция сортировки должна быть выполнена вектор этих узлов, и я хочу использовать
open_list.begin() and open_list.end() as my iterators
, чтобы использовать мою функцию сравнения в качестве третьего аргумента для функции std :: sort (), вот фактическая реализация:
std::sort(open_list.begin(),open_list.end(),open_list.begin()->g_value + open_list.begin()->h_value > open_list.end()->g_value + open_list.end()->h_value );
Здесь , Я в основном добавляю значения h и g, которые являются атрибутами объекта Node, а open_list - вектор указателей на узлы. Я чувствовал, что моя реализация верна, но это вызывает у меня странную ошибку, которая выглядит примерно так:
/ home / piyushkumar / CppND-Route-Planning-Project / src / route_planner. cpp: 65: 93: ошибка: запрос члена 'h_value' в ' ((RoutePlanner ) this) -> RoutePlanner :: open_list.std :: vector :: begin () .__ gnu_cxx :: __ normal_iterator> :: operator- > () ', который имеет тип указателя' RouteModel :: Node * '(возможно, вы имели в виду использовать' -> '?) std :: sort (open_list.begin (), open_list.end (), open_list.begin ( ) -> g_value + open_list.begin () -> h_value> open_list.end () -> g_value + open_list.end () -> h_value);
Некоторые пояснения относительно ошибки: RouteModel
- это класс, а Node
наследуется от этого класса. Почему эта простая функция сравнения в качестве третьего аргумента не работает и говорит, что вы должны использовать ->
, который я уже использовал для получения значений g_value и h_value из объекта Node.
Любая помощь и предложения будут оценены.