Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Learn Container Adaptors: stack, queue, priority_queue | Containers
C++ STL Containers and Algorithms

bookContainer Adaptors: stack, queue, priority_queue

Note
Definition

Container adaptors in C++ are wrappers that provide a simplified, restricted interface to existing container types.

Unlike sequence or associative containers, adaptors like std::stack, std::queue, and std::priority_queue hide iterators and limit element access. They model specific data structures, offering clear and focused operations such as push, pop, and top/front access.

  • Stacks (LIFO);
  • Queues (FIFO);
  • Priority queues (heap-based).

Adaptors achieve this by wrapping an existing container such as std::deque, std::vector, or std::list and forwarding operations while constraining access. You typically use a container adaptor when you need a strict stack, queue, or priority queue abstraction and do not require direct access to elements or iteration.

main.cpp

main.cpp

copy
1234567891011121314
#include <iostream> #include <stack> #include <queue> int main() { std::stack<int> s; s.push(10); s.push(20); std::cout << "Stack top: " << s.top() << "\n"; s.pop(); std::cout << "Stack top after pop: " << s.top() << "\n"; }

The std::priority_queue adaptor provides a way to maintain a collection of elements in heap order, so that the largest (by default) element is always accessible at the top. Internally, it uses a random-access container such as std::vector and maintains the heap invariant using algorithms like std::push_heap and std::pop_heap.

You should use std::priority_queue when you need fast access to the highest-priority element and efficient insertion and removal, but do not require iteration or random access to other elements. It is ideal for scheduling, event simulation, and any scenario involving dynamic sets where priority-based retrieval is crucial.

main.cpp

main.cpp

copy
12345678910111213141516171819202122232425
#include <iostream> #include <queue> #include <vector> #include <string> struct Task { int priority; std::string description; // Higher priority comes first bool operator<(const Task& other) const { return priority < other.priority; } }; int main() { std::priority_queue<Task> tasks; tasks.push({3, "Write report"}); tasks.push({1, "Check email"}); tasks.push({5, "Fix bug"}); while (!tasks.empty()) { std::cout << "Next task: " << tasks.top().description << " (priority " << tasks.top().priority << ")\n"; tasks.pop(); } }
question mark

Which C++ container adaptor provides a Last-In-First-Out (LIFO) data structure?

Select the correct answer

Everything was clear?

How can we improve it?

Thanks for your feedback!

SectionΒ 2. ChapterΒ 6

Ask AI

expand

Ask AI

ChatGPT

Ask anything or try one of the suggested questions to begin our chat

Suggested prompts:

Can you explain how to use std::priority_queue with custom comparison?

What are some common use cases for std::priority_queue?

How does std::priority_queue differ from other container adaptors?

Awesome!

Completion rate improved to 6.67

bookContainer Adaptors: stack, queue, priority_queue

Swipe to show menu

Note
Definition

Container adaptors in C++ are wrappers that provide a simplified, restricted interface to existing container types.

Unlike sequence or associative containers, adaptors like std::stack, std::queue, and std::priority_queue hide iterators and limit element access. They model specific data structures, offering clear and focused operations such as push, pop, and top/front access.

  • Stacks (LIFO);
  • Queues (FIFO);
  • Priority queues (heap-based).

Adaptors achieve this by wrapping an existing container such as std::deque, std::vector, or std::list and forwarding operations while constraining access. You typically use a container adaptor when you need a strict stack, queue, or priority queue abstraction and do not require direct access to elements or iteration.

main.cpp

main.cpp

copy
1234567891011121314
#include <iostream> #include <stack> #include <queue> int main() { std::stack<int> s; s.push(10); s.push(20); std::cout << "Stack top: " << s.top() << "\n"; s.pop(); std::cout << "Stack top after pop: " << s.top() << "\n"; }

The std::priority_queue adaptor provides a way to maintain a collection of elements in heap order, so that the largest (by default) element is always accessible at the top. Internally, it uses a random-access container such as std::vector and maintains the heap invariant using algorithms like std::push_heap and std::pop_heap.

You should use std::priority_queue when you need fast access to the highest-priority element and efficient insertion and removal, but do not require iteration or random access to other elements. It is ideal for scheduling, event simulation, and any scenario involving dynamic sets where priority-based retrieval is crucial.

main.cpp

main.cpp

copy
12345678910111213141516171819202122232425
#include <iostream> #include <queue> #include <vector> #include <string> struct Task { int priority; std::string description; // Higher priority comes first bool operator<(const Task& other) const { return priority < other.priority; } }; int main() { std::priority_queue<Task> tasks; tasks.push({3, "Write report"}); tasks.push({1, "Check email"}); tasks.push({5, "Fix bug"}); while (!tasks.empty()) { std::cout << "Next task: " << tasks.top().description << " (priority " << tasks.top().priority << ")\n"; tasks.pop(); } }
question mark

Which C++ container adaptor provides a Last-In-First-Out (LIFO) data structure?

Select the correct answer

Everything was clear?

How can we improve it?

Thanks for your feedback!

SectionΒ 2. ChapterΒ 6
some-alt