コンテナアダプタ:スタック、キュー、プライオリティキュー
メニューを表示するにはスワイプしてください
C++のコンテナアダプタは、既存のコンテナ型に対して簡略化され、制限されたインターフェースを提供するラッパー。
シーケンスコンテナや連想コンテナとは異なり、std::stack、std::queue、std::priority_queueのようなアダプタはイテレータを隠し、要素へのアクセスを制限。特定のデータ構造をモデル化し、push、pop、top/frontアクセスなど明確で限定的な操作のみを提供。
- スタック(LIFO)
- キュー(FIFO)
- 優先度付きキュー(ヒープベース)
アダプタは、std::deque、std::vector、std::listなどの既存コンテナをラップし、操作を転送しつつアクセスを制限することでこれを実現。厳密なスタック、キュー、優先度付きキューの抽象化が必要で、要素への直接アクセスやイテレーションが不要な場合にコンテナアダプタを使用。
main.cpp
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"; }
std::priority_queue アダプタは、要素のコレクションをヒープ順序で管理し、デフォルトで最大の要素が常にトップでアクセスできるようにする機能を提供します。内部的には、std::vector などのランダムアクセスコンテナを使用し、std::push_heap や std::pop_heap のようなアルゴリズムでヒープ不変条件を維持します。
std::priority_queue は、最も優先度の高い要素への高速アクセスや効率的な挿入・削除が必要で、他の要素へのイテレーションやランダムアクセスが不要な場合に適しています。スケジューリング、イベントシミュレーション、優先度に基づく取得が重要な動的集合を扱うシナリオに最適です。
main.cpp
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(); } }
フィードバックありがとうございます!
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください