다음은 키보드에서 입력받은 데이터를 priority_queue에 기록하는 걸 보여주는 코드다.
std::priority_queue<std::string> words; std::string word; std::cout << “Enter words separated by spaces, enter Ctrl+Z on a separate line to end:\n“; while (true) { if ((std::cin >> word).eof()) break; words.push(word); }
Ctrl+Z를 입력하면 입력 스트림이 파일의 끝(EOF) 상태로 설정되고 입력 루프가 종료된다. istream 객체의 operator>>() 멤버는 입력 스트림 객체를 반환하므로 if 조건절에 eof()를 호출해 cin의 상태를 테스트하는 표현식을 쓸 수 있다. 입력받은 words는 우선순위에 따라 정렬된 상태이므로 가장 큰 단어가 words 큐의 앞에 오게 된다. 입력은 자동으로 정렬된다.
priority_queue에는 반복자가 없다. 모든 원소에 접근하려면 원소를 나열하거나 복제해야 한다. 모든 원소를 나열하면 큐가 비워지게 된다. 즉, queue와 priority_queue는 제약사항이 같다. 따라서 이런 연산 이후에도 원소를 유지하고 싶다면 먼저 큐를 복제해야 한다. 큐를 복제할 때는 보통 다른 유형의 컨테이너를 사용하곤 한다.
std::priority_queue<std::string> words_copy {words}; // 출력을 위한 복제본 while (!words_copy.empty()) { std::cout << words_copy.top() << ” “; words_copy.pop(); } std::cout << std::endl;