C++11stlintermediate
std::priority_queue (C++11 Evolution)
C++11 · Modern Revolution · Compiler flag: -std=c++11
Explanation
Queue with largest element at top, supports move semantics and `emplace`.
Real-World Scenario
Add tasks to a priority-based scheduler.
Quick Snippet
snippet.cpp
#include <queue> std::priority_queue<int> pq; pq.emplace(1);Full Example
priority_queue.cpp
// CodeNebula - C++11 Example: priority_queue (C++11 Features)
// Compile: g++ -std=c++11 -Wall -Wextra -o example priority_queue.cpp
// Demonstrates C++11-specific std::priority_queue features: emplace
// (construct in-place), swap, move semantics, and custom comparator
// with a lambda.
#include <iostream>
#include <queue>
#include <vector>
#include <string>
#include <functional>
int main() {
// Default max-heap with emplace
std::cout << "=== emplace (max-heap) ===\n";
std::priority_queue<int> maxpq;
maxpq.emplace(30);
maxpq.emplace(10);
maxpq.emplace(50);
maxpq.emplace(20);
maxpq.emplace(40);
std::cout << "Top: " << maxpq.top() << "\n";
std::cout << "Drain: ";
while (!maxpq.empty()) {
std::cout << maxpq.top() << " ";
maxpq.pop();
}
std::cout << "\n\n";
// Min-heap using std::greater
std::cout << "=== Min-heap (std::greater) ===\n";
std::priority_queue<int, std::vector<int>, std::greater<int>> minpq;
for (int v : {30, 10, 50, 20, 40}) minpq.emplace(v);
std::cout << "Drain: ";
while (!minpq.empty()) {
std::cout << minpq.top() << " ";
minpq.pop();
}
std::cout << "\n\n";
// swap: exchange contents of two priority queues
std::cout << "=== swap ===\n";
std::priority_queue<int> pq1, pq2;
pq1.push(100); pq1.push(200);
pq2.push(5); pq2.push(10); pq2.push(15);
std::cout << "Before: pq1.top=" << pq1.top()
<< " pq2.top=" << pq2.top() << "\n";
pq1.swap(pq2);
std::cout << "After: pq1.top=" << pq1.top()
<< " pq2.top=" << pq2.top() << "\n";
std::cout << "pq1.size=" << pq1.size()
<< " pq2.size=" << pq2.size() << "\n\n";
// Move semantics
std::cout << "=== Move semantics ===\n";
std::priority_queue<int> src;
src.push(7); src.push(3); src.push(9);
std::cout << "src size before: " << src.size() << "\n";
std::priority_queue<int> dst = std::move(src);
std::cout << "dst size after: " << dst.size() << "\n";
std::cout << "dst top: " << dst.top() << "\n";
std::cout << "src size after: " << src.size() << "\n";
return 0;
}
// Expected output:
// === emplace (max-heap) ===
// Top: 50
// Drain: 50 40 30 20 10
//
// === Min-heap (std::greater) ===
// Drain: 10 20 30 40 50
//
// === swap ===
// Before: pq1.top=200 pq2.top=15
// After: pq1.top=15 pq2.top=200
// pq1.size=3 pq2.size=2
//
// === Move semantics ===
// src size before: 3
// dst size after: 3
// dst top: 9
// src size after: 0
Run command
g++ -std=c++11 -Wall -Wextra -o example priority_queue.cpp