我必须为 make_heap 重载什么运算符?是 () 运算符吗?如果我已经在我的算法中为另一种情况定义了它。在我的情况下,任何人都可以提供使用 make_heap 的正确方法。请参阅下面的代码以更好地理解。
在我的顶点类中
bool operator() (vertex &v) const
{
return (v.key() == _key);
}
这在以下 std 方法 find_if 中构建图形时使用
vertex_iterator GraphComponents::graph::find_vertex_by_key(int key)
{
return std::find_if(_vertices.begin(), _vertices.end(), GraphComponents::vertex(key));
}
现在在我的算法中,我想在不同的上下文中使用顶点作为函数对象。
std::list<int> GraphComponents::graph::breadth_first_search (int key, int start_key)
{
std::vector<GraphComponents::vertex *> heap;
for (vertex_iterator copy_iter = _vertices.begin(); copy_iter != _vertices.end(); ++copy_iter) {
heap.push_back(&(*copy_iter));
}
std::make_heap(heap.begin(), heap.end(), vertex(<should be distance>));
}
这里我不想在比较中使用键,但我想使用距离成员,因此距离最短的顶点位于堆的顶部。没有实现我自己的堆,推荐的解决方法是什么?