[英]priority_queue<vector<int> > pq; is saything that “priority_queue” is not a template, how would I fix this?
[英]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類也與關聯容器, set
和map
,並在其中提供相同的功能。 通過精心設計比較器類,您可以創建集合和映射,其迭代器以某種順序遍歷集合/映射中的鍵,而不是從最低到最高(從本質上來說,這意味着“最低”和“最高”) 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.