2016-10-11 14 views
2

次のコードでは、次のようなエラーが発生します。 どこが間違っていますか?C++でベクタを使用した単純優先度キューの実装

error: ‘function’ is not a member of ‘std’ 

は、私はC++のstd libのキューを使用したプライオリティキューを作成し、キューをminにしたいことは、少なくとも準備をするために時間がかかるというアイスクリームです。私はこれを実装しようとしている - >declaring a priority_queue in c++ with a custom comparator

#include <cmath> 
#include <cstdio> 
#include <vector> 
#include <iostream> 
#include <algorithm> 
#include <map> 
#include <vector> 
#include <queue> 
#include <deque> 
#include <iterator> 
#include <string> 
#include <sstream> 

using namespace std; 


class IceCream 
{ 
public: 
    int time_to_prep; 
    IceCream(int flav) { 
      time_to_prep = flav; 
     } 
}; 

bool Compare(IceCream a, IceCream b) 
{ 
    return a.time_to_prep > b.time_to_prep; 
} 

int main() 
{ 
    priority_queue<IceCream, vector<IceCream>, std::function<bool(IceCream a, IceCream b)> > my_pq(Compare); 
    my_pq.push(IceCream(4)); 
    my_pq.push(IceCream(33)); 
    my_pq.push(IceCream(9)); 
    cout << my_pq.top() << endl; 
    return 0; 
} 

答えて

6
#include <functional> 

あなたは、これがstd::functionへのアクセスを得るために含める必要がある

参照:http://en.cppreference.com/w/cpp/utility/functional/functionそれは最後の行... ERROR「`エラーで停止し

+0

: 'operator <<'に一致するものはありません(オペランドの型は 'std :: ostream {別名std :: basic_ostream }'と 'const value_type {別名const IceCream}') cout << my_pq.top()<< endl; ' –

+1

@MohitKumar最後の行に別のコンパイルエラーがあるということは、印刷できない 'IceCream'のインスタンスを返す' my_pq.top() 'を印刷しようとしているためです。 'cout << my_pq.top()を実行する必要があります。time_to_prep << endl' – sji

+0

@MohitKumarこれは別の問題です。 –

関連する問題