2012-05-13 6 views
0
int main() 
{ 
    list<char> letters; 
    priority_queue<char, vector<char>, less<char>>letters_trans; 

    cout << "Enter some sentence: " << endl << endl; 

    std::istream_iterator<char> input(cin), input_end; 

    copy(input, input_end, back_inserter<list<char>>(letters)); 

    for each(char letter in letters) 
    { 
     letters_trans.push(letter); 
    } 

    while(!letters_trans.empty()) 
    { 
     cout << letters_trans.top(); 
     letters_trans.pop(); 
    } 
    cout << endl; 
    getch(); 
    return 0; 
} 

Priority_queue 및 입력 스트림 반복자

그래서 나는 cin 프로젝트를 우선 대기열로 전송하는 학교 프로젝트가 있습니다. 글쎄, 내가 뭘했는지 ... 내가 한 것은 입력 istream_iterator

다음에 매우 비효율적 인 priority_queue로 목록을 만들었습니다. 나는 장기간에 걸쳐 추측합니다. 중간 사용자없이 priority_queue로 직접 cin을 전송할 수있는 방법이 있습니다. .. 나는 그 일을 시도하지만 복사 기능은 늘 내게는 아규먼트로 priority_queue하자 C++ 11에서

답변

1

이 작동합니다 :

std::priority_queue<char> q(std::istream_iterator<char>(std::cin), std::istream_iterator<char>()); 

전체 예 :

#include <iostream> 
#include <iterator> 
#include <vector> 
#include <queue> 

int main() 
{ 
    std::priority_queue<char> q(std::istream_iterator<char>(std::cin), std::istream_iterator<char>()); 

    while (!q.empty()) 
    { 
     std::cout << q.top() << '\n'; 
     q.pop(); 
    } 
} 
+1

왜 중간 벡터? 우선 순위 큐는 한쌍의 입력 반복자로 직접 생성 될 수 있습니다. –

+0

@AlanStokes : 실제로, 나는 그 생성자를 놓쳤다. 고침, 고마워! –

3

당신 수 const 반복자 쌍 [first, last)에서 ruct priority_queue (또는 표준 컨테이너). cpp reference 가입일하십시오 시퀀스의 초기 및 최종 위치들

template <class InputIterator> 
     priority_queue (InputIterator first, InputIterator last, 
          const Compare& x = Compare(), 
          const Container& y = Container()); 

마지막

입력 반복자. 사용 된 범위는 [first, last]이며 요소가 처음에는 가리키고 마지막 요소는 가리키지 않는 요소를 포함하여 first와 last 사이에있는 모든 요소를 포함합니다. 함수 템플릿 유형 은 모든 유형의 입력 반복자 일 수 있습니다.

코드 :

#include <iostream> 
#include <iterator> 
#include <queue> 
#include <vector> 

int main() 
{ 
    std::istream_iterator<char, std::vector<char> > input(std::cin), input_end; 
    std::priority_queue<char> q(input, input_end); 

    while (!q.empty()) 
    { 
    std::cout << q.top() << std::endl; 
    q.pop(); 
    } 
} 
+0

두 InputIterator를 사용하는 생성자를 사용하고 있습니다 - input과 input_end는 포인터가 아닙니다. –

+0

@ AlanStokes 감사합니다. 수정 됨. 생성자 서명은 [sgi] (http://www.sgi.com/tech/stl/priority_queue.html)의 사본을 붙여 넣었습니다. – Vikas