![](/img/trans.png)
[英]Use a custom comparator in a class that inherits from std::priority_queue
[英]std::priority_queue: Custom ordering without defining comparator class
我希望有一個具有自定義排序的優先級隊列,但是像我一樣懶,我不想定義一個實現operator()的比較器類。
我真的希望編譯這樣的東西:
std::priority_queue<int, std::vector<int>,
boost::bind(some_function, _1, _2, obj1, obj2)> queue;
其中some_function是一個bool返回函數,它接受四個參數,第一個和第二個是隊列的int,最后兩個是計算排序所需的一些對象(const引用)。
(錯誤:'boost :: bind'不能出現在常量表達式中)
但這不編譯。 甚至更簡單
std::priority_queue<int, std::vector<int>, &compare> queue;
不會編譯,比較是返回bool的二進制函數。
(錯誤:模板參數列表中參數3的類型/值不匹配'模板類std :: priority_queue';預期類型,得到'比較')
有什么建議么?
這可能有效:
std::priority_queue<int, std::vector<int>,
boost::function<bool(int,int)> >
然后將綁定表達式傳遞給隊列的構造函數。
PS你得到那些編譯錯誤,因為你把運行時評估的表達式放在需要typename或constant表達式的地方。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.