이 튜토리얼에서는 C++의 집합을 사용하여 양방향 우선 순위 대기열을 만들 것입니다.
양방향 대기열을 만드는 단계를 살펴보겠습니다.
-
원하는 이름으로 구조체를 만듭니다.
-
집합을 사용하여 대기열에 대한 변수를 만듭니다.
-
크기 큐의 크기를 반환하는 메서드입니다.
-
is_empty 대기열이 비어 있는지 여부를 반환하는 메서드입니다.
-
삽입 큐에 새 요소를 삽입하는 메서드입니다.
-
시작 큐의 왼쪽에서 요소를 반환하는 메서드입니다.
-
get_end 큐의 오른쪽에서 요소를 반환하는 메서드입니다.
-
delete_start 왼쪽에서 첫 번째 요소를 삭제하는 메서드입니다.
-
delete_end 메소드는 오른쪽에서 첫 번째 요소를 삭제합니다.
예시
코드를 봅시다.
#include <bits/stdc++.h> using namespace std; struct doubleEndedQueue { set<int> s; int size() { return s.size(); } string is_empty() { return s.size() == 0 ? "True" : "False"; } void insert(int x) { s.insert(x); } int get_start() { return *(s.begin()); } int get_end() { return *(s.rbegin()); } void delete_start() { if (s.size() == 0) { return; } s.erase(s.begin()); } void delete_end() { if (s.size() == 0) { return; } auto end = s.end(); end--; s.erase(end); } }; int main() { doubleEndedQueue d; cout << "is empty: " << d.is_empty() << endl; d.insert(1); d.insert(2); d.insert(3); d.insert(4); d.insert(5); cout << "is empty: " << d.is_empty() << endl; cout << "end: " << d.get_end() << endl; d.delete_end(); cout << "end: " << d.get_end() << endl; cout << "start: " << d.get_start() << endl; d.delete_start(); cout << "start: " << d.get_start() << endl; return 0; }
출력
위의 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.
is empty: True is empty: False end: 5 end: 4 start: 1 start: 2
결론
튜토리얼에서 질문이 있는 경우 댓글 섹션에 언급하세요.