2015-04-30 41 views
1

我有我的結構:如何在函子中爲std :: priority_queue傳遞其他對象?

struct S{ 
    int a;  
}; 

,我有類:

class Other{ 
    //some fields 
}; 

我需要寫仿函數:

struct Comparator { 
    bool operator()(S& l, S& r) { 
    //some code, considered l,r and any object of class Other 
    } 
}; 

在運營商()應被視爲類其他的任何對象。 如何將對象轉換爲函子? 我使用functor作爲priority_queue。 其他類的對象不能是靜態字段。

爲此目的的另一種方法?

+0

需要了解更多信息 –

回答

2

Comparator商店Other型(或參考,shared_ptrunique_ptr取決於所有權和有效性語義)的目的,並通過Comparator的構造在通過此。

struct Comparator { 
    Comparator(const Other& val) : mVal(val){} 
    bool operator()(S& l, S& r) 
    { 
    //Comparison code here uses l, r and mVal 
    } 

    private: 
    Other mVal; 
}; 

創建priority_queue這樣的,假設你想使用vector<T>爲基礎容器:

Other otherToHelpCompare; 
Comparator myComparator{otherToHelpCompare}; 
std::priority_queue<T, std::vector<T>, Comparator> q{myComparator}; 
相關問題