더북(TheBook)

다음은 키보드에서 입력받은 데이터를 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에는 반복자가 없다. 모든 원소에 접근하려면 원소를 나열하거나 복제해야 한다. 모든 원소를 나열하면 큐가 비워지게 된다. 즉, queuepriority_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;
 

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.