gpt4 book ai didi

c++ - make_heap 使用函数对象

转载 作者:行者123 更新时间:2023-11-27 23:24:45 24 4
gpt4 key购买 nike

我必须为 make_heap 重载什么运算符?是 () 运算符吗?如果我已经在我的算法中为另一个案例定义了那个。谁能提供在我的案例中使用 make_heap 的正确方法。请参阅下面的代码以更好地理解。

我有一个顶点类

bool operator() (vertex &v) const 
{
return (v.key() == _key);
}

这在以下标准方法 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>));
}

这里我不想在比较中使用键,但我想使用距离成员,因此距离最短的顶点位于堆的顶部。除了实现我自己的堆之外,推荐的解决方法是什么?

最佳答案

实现一个函数,它接受两个你的类型的参数,如果左边的参数应该被认为相对小于右边的参数,则返回 true。 (少即是大)

然后将该函数作为第三个参数传递给make_heap .或者你可以实现 operator<使用上述语义,如果您不传递任何函数,将使用它。

http://en.wikipedia.org/wiki/Strict_weak_ordering

在你的例子中,你的元素是指针,所以你不能写一个 operator< ,因为已经为所有指针类型定义了该函数。所以你必须写一个单独的函数,像这样:

bool CompareByDistance(const GraphComponents::vertex * lhs,
const GraphComponents::vertex * rhs)
{
return lhs->distance() < rhs->distance();
}

关于c++ - make_heap 使用函数对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10167537/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com