0

以下のコンパイル:

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());
}

コンパイル エラーが発生します - 'class Compare' に 'rebind' という名前のクラス テンプレートがありません。その理由は何ですか?gcc で RedHat Linux を使用しています。どうもありがとう。

4

2 に答える 2

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;
}
于 2012-10-26T16:30:20.403 に答える
3

std::vector<> にはコンパレータ テンプレート引数がありません。2 番目の引数にはアロケータがあります。

ベクターテンプレート引数リストでコンパレーターをアロケーターとして使用しています。

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());
}
于 2012-10-26T16:29:44.727 に答える