首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++ STL `priority_queue` 與 `less` 比較器:為何顯示「隊尾元素」先出隊?

     編輯:程式設計綜合問答

疑惑來源

priority_queue<T, Container, Compare> 預設 Compare = std::less<T>,文件說「小的元素往前排,大的往後排,出隊時序列尾的元素出隊」,似乎違背隊列 FIFO 直覺。

本質釐清

priority_queue 不是隊列,而是 最大堆(預設以 less 使最大元素位於堆頂)。

  • 底層容器預設 std::vector,以 make_heap、push_heap、pop_heap 維護堆性質。
  • top() 回傳堆頂元素(最大值),pop() 移除堆頂並重建堆。
  • 「隊尾」一詞僅是將底層陣列視為序列時的說法,實際語意為「堆頂」。

程式碼驗證

std::priority_queue pq; // less -> 最大堆
pq.push(3); pq.push(1); pq.push(4);
std::cout << pq.top(); // 4 (最大值)
pq.pop();
std::cout << pq.top(); // 3

若需最小堆

std::priority_queue, std::greater> minPq;
// 或 C++23: std::priority_queue pq(std::greater{});

記憶口訣

「priority_queue 是披著隊列外衣的堆;less 讓大的浮上來,greater 讓小的沉下去。」

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved