【发布时间】:2020-05-26 01:22:44
【问题描述】:
我对 C++ 语言比较陌生,并尝试从标准命名空间中定义的算法库中实现排序功能并直接使用 std::sort。 使用 sort 对向量进行排序的常见结构是使用迭代器和比较函数给出的。
考虑向量v as {4,3,5,9},排序后它看起来像{9,5,4,3}.
举个例子
std::sort(v.begin(),v.end(),a>b)
所以,我想使用这种方法根据我的 A* 搜索算法的启发式值对节点列表进行排序。启发式基本上是添加节点对象的 2 个属性,我必须对这个向量进行排序操作节点,我想使用
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 值,它们是对象节点的属性和 open_list 是指向节点的指针向量。我觉得我的实现是正确的,但它给我带来了一个奇怪的错误,如下所示:
/home/piyushkumar/CppND-Route-Planning-Project/src/route_planner.cpp:65:93:错误:在'((RoutePlanner)中请求成员'h_value' 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 继承自该类。为什么这个简单的比较函数作为第三个参数会失败,并说你应该使用->,我已经用它从 Node 对象中检索 g_value 和 h_value 的值。
任何帮助和线索将不胜感激。
【问题讨论】:
-
您所做的一切都不是潜在有效的 C++。您是否要求我们将任何语言翻译成 C++?