2013-09-26 2 views
0

기본적으로 내 프로그램은 단어 데이터 스트림에서 읽혀지고 각 단어의 발생 및 고유 단어의 총 수를 계산합니다. 그것들을지도로 읽을 것입니다. 내 프로그램은 하나의 문제를 제외하고는 완벽하게 작동합니다 ... total의 값은 여전히 ​​0으로 유지됩니다. for_each 문에서 총계가 증가하지만 p.print로 작동하면 문제가되는 것 같습니다. ... 내 인쇄 기능이 정의되어 증가하지 않은 경우 다음과 같이로컬 변수/클래스 변수 증분

//CLASS PRN FUNCTIONS 
// constructor 
PRN::PRN(const int& s, const int& c, const int& t) { 
    sz=s; 
    cnt=c; 
    total=t; 
} 

// overloaded operator, where P is defined as 
// typedef pair < string, int > P; 
void PRN::operator()(const P& p) { 
    if(cnt%NO_ITEMS == 0 && cnt != 0) 
     cout << '\n'; 
    cout << setw(ITEM_W) << left << p.first << " : " << setw(NO_W) << left << p.second; 
    total += p.second; 
    cnt++; 
} 

// to printout final value of total                
void PRN::print() const { 
    cout << '\n' << '\n'; 
    cout << "no of words in input stream : " << total << endl; 
    cout << "no of words in output stream : " << sz << endl; 
} 
+0

당신이 문제를 이해했기 때문에 다행이지만, 변수, 클래스, 함수 및 인수의 이름보다 나은 이름을 지정하십시오. 설명 적으로 코드를 읽는 다른 모든 사람들에게 도움이됩니다. – Aesthete

답변

0

이 그것을 알아 냈 :

void print_words(const map<string,int> &aMap) { 
    PRN p(aMap.size()); 
    for_each(aMap.begin(), aMap.end(), p); 
    p.print(); 
} 

나는 각 단어의 처리를 담당하는 클래스가, 여기에 정의입니다 ... 가지고 있어야합니다

p = for_each(aMap.begin(), aMap.end(), p); 

자신의 문제를 파악하는 것이 더 나을 것입니다.