C++STL과 알고리즘

stack, queue, priority_queue

자료구조 수업에서 자주 보는 `stack`, `queue`, `priority_queue`의 접근 규칙과 용도를 정리합니다.

마지막 수정 2026년 3월 19일

기본 패턴

cpp
std::stack<int> st;
st.push(10);
st.push(20);
st.pop();

std::queue<int> q;
q.push(1);
q.push(2);

설명

  • 이 셋은 모두 "컨테이너 adaptor"라서, 내부 저장소 위에 특정 접근 규칙만 노출하는 형태입니다.
  • stack은 LIFO, queue는 FIFO, priority_queue는 우선순위가 가장 큰 원소부터 꺼내는 구조로 이해하면 기본 그림이 잡힙니다.
  • 공통점은 원소 전체를 자유롭게 순회하기보다, 자료구조의 핵심 연산만 제한적으로 제공한다는 점입니다.
  • 그래서 알고리즘 문제나 그래프 탐색, 작업 스케줄링처럼 특정 접근 순서가 중요한 문제와 잘 맞습니다.
  • "벡터처럼 보관"이 아니라 "어떤 순서로 꺼낼 것인가"가 이 자료구조들의 핵심 선택 기준입니다.

짧은 예제

cpp
#include <iostream>
#include <queue>
#include <stack>

int main() {
    std::priority_queue<int> pq;
    pq.push(5);
    pq.push(1);
    pq.push(9);

    std::cout << pq.top() << "\n";
}

빠른 정리

항목설명
stack마지막에 넣은 것을 먼저 꺼냄
queue먼저 넣은 것을 먼저 꺼냄
priority_queue우선순위가 높은 원소부터 꺼냄
adaptor내부 컨테이너 위에 제한된 인터페이스를 제공
사용 예DFS, BFS, 스케줄링, 우선순위 처리

주의할 점

priority_queue는 자동 정렬된 전체 시퀀스를 제공하는 컨테이너가 아닙니다. 가장 우선순위가 높은 원소 접근에 특화된 구조라는 점을 먼저 기억하는 편이 좋습니다.