2015-09-26 55 views
-1

嘗試使用priority_queue。代碼是:爲什麼我的代碼使用priority_queue無法編譯?

struct HeapNode 
    { 
     int val; 
     int row; 
     int col; 
     HeapNode(int a, int b, int c) : val(a), row(b), col(c) {} 
    }; 

    class MyComparator 
    { 
    public: 
     bool operator()(HeapNode &n1, HeapNode &n2) 
     { 
      return n1.val < n2.val; 
     } 
    }; 

    void myfunction() 
    { 

     std::priority_queue<HeapNode, std::vector<HeapNode>, MyComparator> hp1; //LINE1 
     std::priority_queue<HeapNode, MyComparator> hp2; //LINE2 
    } 

試過兩種方式,如LINE1和LINE2所示。 這兩行都不能通過編譯。

+0

你說「通過編譯」就像是一個測試。這不是,也不應該作爲一個使用。除此之外,它給了什麼錯誤?警告?這些可以提供信息。 –

回答

0

的std :: priority_queue發生在構造函數中3個參數:

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

在你的情況LINE-看起來不錯,應該編譯。什麼是錯誤信息?

LINE2您正嘗試創建具有容器「MyComparator」(不是容器!)的自定義類型(HeapNode)的std :: priority_queue。

用於存儲元素的底層容器的類型。 容器必須滿足SequenceContainer的要求。 此外,它必須提供以下功能以及通常的 語義:front(),push_back(),pop_back()。標準容器 std :: vector和std :: deque滿足這些要求。

http://en.cppreference.com/w/cpp/container/priority_queue

「MyComparator」 是不是一個容器,它不支持所需的方法。

我檢查了你的代碼LINE2註釋掉,它編譯。你包括和?你有什麼主要功能嗎?

+0

誤差LINE1: '錯誤\t \t 2錯誤LNK1169:一個或一個以上乘法定義的符號發現' – jjw

+0

「錯誤\t \t 1個錯誤LNK2005:「INT __cdecl myfunction的(類的std ::矢量<類的std ::矢量>,class std :: allocator >>>&,int)「(?findKth2dArray @@ YAHAAV?$ vector @ V?$ vector @ HV?$ allocator @ H @ std @@@ std @@ V?$ allocator @ V?$ vector @ HV?$ allocator @ H @ std @@@ std @@@ 2 @@ std @@ H @ Z)已經在mycode.obj中定義 ' – jjw

+0

請確保您只包含* .h文件一次(請閱讀有關包括守衛:[click](http://www.wikiwand.com/en/Include_guard)。您有哪些文件在你的項目中?你確定你的代碼是用* .cpp文件而不是* .h來編寫的嗎?在這裏你可以查看工作示例:http://cpp.sh/25qb – dptd