Z
ZHANK
编程在线教程C++ 教程适配器与有序容器
STL 容器深入

适配器与有序容器

stack/queue/priority_queue 适配器、set/map 红黑树原理、自定义比较器

适配器与有序容器

stackqueuepriority_queue 是容器适配器——它们包装底层容器,提供特定接口。set/map 底层是红黑树。

学完本章你将: 掌握 stack/queue/priority_queue、有序容器原理、自定义比较器。


stack —— 后进先出

cpp
#include <stack>

std::stack<int> s;
s.push(1); s.push(2); s.push(3);

while (!s.empty()) {
    std::cout << s.top() << " ";  // 3 2 1
    s.pop();
}

queue / priority_queue

cpp
#include <queue>

// queue —— 先进先出
std::queue<int> q;
q.push(1); q.push(2); q.push(3);
std::cout << q.front();  // 1

// priority_queue —— 最大堆(默认)
std::priority_queue<int> pq;
pq.push(3); pq.push(1); pq.push(5);
std::cout << pq.top();  // 5(最大的在顶部)

// 最小堆——自定义比较器
std::priority_queue<int, std::vector<int>, std::greater<int>> min_pq;
min_pq.push(3); min_pq.push(1); min_pq.push(5);
std::cout << min_pq.top();  // 1

自定义 set/map 比较器

cpp
// 按长度排序的 set
struct ByLength {
    bool operator()(const std::string& a, const std::string& b) const {
        return a.length() < b.length();
    }
};

std::set<std::string, ByLength> words;
words.insert("apple");
words.insert("pie");
words.insert("banana");
// 顺序: pie, apple, banana