words1의 emplace() 멤버는 저장할 객체 타입의 생성자, 여기서는 shared_ptr<string> 생성자를 호출한다. emplace()에 인수로 전달된 표현식으로 자유 공간에 생성된 string 객체의 주소가 생성자에 전달되는 인수가 된다. 이 코드에서는 “two”, “three”, “one”, “five”를 담은 객체를 가리키는 string 객체 포인터 네 개를 우선순위 큐에 저장한다. 우선순위 큐에서 원소들의 순서는 앞에서 정의한 comp 람다 표현식으로 정해진다.
물론, 초기 원소 세트를 유지할 필요가 없다면 우선순위 큐에 unique_ptr<string>을 저장하는 것도 가능하다.
auto ucomp = [](const std::unique_ptr<string>& wp1, const std::unique_ptr<string>& wp2) { return *wp1 < *wp2; }; std::priority_queue<std::unique_ptr<string>, std::vector<std::unique_ptr<string>>, decltype(ucomp)> words2 {ucomp};
비교 함수를 정의한 람다 표현식에 unique_ptr<string> 객체에 대한 참조를 사용한 것을 볼 수 있다. 비교자 타입을 지정해야 하므로 우선순위 큐에 세 가지 템플릿 타입 인수를 모두 지정해야 한다. 두 번째 템플릿 타입 인수에 deque<string>을 지정할 수 있지만, 여기서는 기본 컨테이너 타입을 사용했다. emplace()를 사용해서 우선순위 큐에 원소를 추가하는 것도 여전히 가능하다.
words2.emplace(new string{“one”}); words2.emplace(new string {“two”}); words2.emplace(new string {“three”}); words2.emplace(new string {“five”});