我确信我犯的是一些非常愚蠢的错误,但我们无法指出它。 C ++的make_heap
STL中的algorithm
函数具有语法
void make_heap(v.begin(), v.end(),Compare comp );
其中v被声明为int
向量。
现在comp输入默认为<
,但我想更改它,以便我可以使用它来制作最小和最大堆。看看其他对我来说有意义的例子是
void make_heap(v.begin(), v.end(),std::less<int> );
OR
void make_heap(v.begin(), v.end(),std::greater<int> );
但我继续收到编译器错误expected primary expression before ')' token
我无法弄清楚我做错了什么? 有什么帮助吗?
答案 0 :(得分:1)
将()
放在最后
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
类对象(二进制函数)。
希望它有所帮助!