gpt4 book ai didi

c++ - 修改 C++ 算法 STL 中的 make_heap 以作为最小堆工作

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:57:29 25 4
gpt4 key购买 nike

我确定我犯了一些非常愚蠢的错误,但一直无法指出。 make_heap algorithm 中的函数C++的STL有语法

void make_heap(v.begin(), v.end(),Compare comp );其中 v 被声明为 int vector 。现在 comp 输入默认为 <但我想更改它,以便我可以使用它来制作最小堆和最大堆。查看其他示例,对我来说有意义的是做类似的事情,

void make_heap(v.begin(), v.end(),std::less<int> );

void make_heap(v.begin(), v.end(),std::greater<int> );

但我一直收到编译器错误 expected primary expression before ')' token

我不知道我做错了什么?有帮助吗?

最佳答案

()最后

void make_heap(v.begin(), v.end(), std::greater<int>());

原因

priority_queue签名 -

template <class T, class Container = vector<T>,
class Compare = less<typename Container::value_type> > class priority_queue;

所以,它需要一个 Compare类(不是 Compare 类对象)作为第三个参数。所以priority_queue<int, vector<int>, greater<int>()> Q;将产生编译错误,因为您需要传递 Compare类(二元谓词)。正确的语法是 -

priority_queue<int, vector<int>, greater<int>> Q;

make_heap签名是 -

template <class RandomAccessIterator, class Compare>
void make_heap (RandomAccessIterator first, RandomAccessIterator last,
Compare comp );

Compare类对象。所以make_heap(v.begin(), v.end(), std::greater<int>());会给出编译错误。你需要一个 Compare类对象(二元函数)在这里。

希望对您有所帮助!

关于c++ - 修改 C++ 算法 STL 中的 make_heap 以作为最小堆工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43289722/

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