簡體   English   中英

如何解釋優先級隊列的模板簽名?

[英]How do I interpret this template signature of priority queue?

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

我了解前兩個模板參數,第一個模板參數是存儲在優先級隊列中的元素的數據類型,第二個模板是程序員想要使用的容器類型,它可以是雙端隊列或向量。

但是第三個論點使我有些困惑,因為我從未見過類似的東西。 我會做類似的事情:

template <class T, class Container = vector<T>
class priority_queue{
    /* Implementation */
};

它與優先級隊列所必需的嚴格的弱排序標准有關嗎? 如果是,我如何了解更多信息? 您能舉一個使用第三個參數的例子嗎?

我是模板編程的新手,非常感謝您的幫助。

第三個參數指定比較器類。

比較器類負責比較隊列元素,以確定隊列順序。 您已經了解到隊列中的元素首先按“較高”值排序。 好吧,這就是定義“更高”的含義的地方。

比較器類具有一個簡單的接口:給定兩個值,如果第一個值小於第二個值,則返回true否則返回false 默認實現std::less使用傳統的<運算符比較兩個值。

使用自定義比較器類以更改優先級隊列的行為。 一個示例是將std::greater而不是std::less為比較器類。 std::greater使用>運算符,因此這會創建一個“相反順序”的優先級隊列,該隊列首先提供最低值,而不是最高值。

或者,您可以創建自己的自定義比較器類,例如:

class last_four_bits {

public:

    bool operator()(int a, int b) const
    {
           return (a & 0x0F) < (b & 0x0F);
    }
};

該比較器類僅比較int的最低四位。 反過來,這使得:

std::priority_queue<int, std::vector<int>, last_four_bits>

查看隊列中每個int值的至少四位,因此將最后四位中具有最高值的所有int排序,將其值較小前的所有int排序,而忽略int中的所有其他位。

PS Comparator類也與關聯容器, setmap ,並在其中提供相同的功能。 通過精心設計比較器類,您可以創建集合和映射,其迭代器以某種順序遍歷集合/映射中的鍵,而不是從最低到最高(從本質上來說,這意味着“最低”和“最高”) 。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM