make_heap()编译问题

时间:2012-10-26 16:26:58

标签: c++ linux stl

编译以下内容:

class Compare
{
   bool cmp(const int& a, const int& b){return a>b;}
};

int main()
{
   vector<int, Compare> v;
   make_heap(v.begin(), v.end(), Compare());
}

导致编译错误 - “类比较”中没有名为“rebind”的类模板。 可能是什么原因?我使用RedHat Linux和gcc。 非常感谢。

2 个答案:

答案 0 :(得分:4)

您在 begin() end()附近缺少括号,并且以错误的方式定义比较器。这应该是它应该是这样的:

#include <vector>
#include <algorithm>
#include <functional>

struct Compare: std::binary_function<int const&, int const&, bool>
{
   public:
   bool operator()(const int& a, const int& b){return a>b;}
};

int main()
{
   std::vector<int> v;
   std::make_heap(v.begin(), v.end(), Compare());
   return 0;
}

答案 1 :(得分:3)

的std ::矢量&lt;&GT;没有比较器模板参数;它的第二个参数有一个 allocator

您在比较模板参数列表中使用比较器作为分配器。

class Compare
{
   public:
   bool operator()(const int& a, const int& b){return a>b;}
};

int main()
{
   vector<int> v;
   make_heap(v.begin(), v.end(), Compare());
}