2016-09-05 4 views
0

나는 구조를 가지고있다.구조체 배열의 고유 요소 양을 계산하는 방법은 무엇입니까? 나는 많은 다른 단어와 함께 텍스트 파일 읽기 및 배열로 저장하고있어</p> <pre><code>struct wordItem { string word; int count; }; </code></pre> <p>:

ifstream inputFile("data.txt"); 
    if(inputFile.is_open()) 
    { 
     while(getline(inputFile, data, ' ')) 
     { 
     wordItemList[i].word = data; 
     i++; 
     } 
    } 

제 질문은 단어가 배열에 나타날 때마다 계산하는 가장 좋은 방법입니다. 예를 들어 내 data.txt라는 파일이 있다면

나는 각 단어가 내 구조체 내에 표시 얼마나 많은 시간을 저장할 수 있도록하려면
the fox jumped over the fence 

"INT 카운트;"

+0

단어를 카운터에 매핑하려면 데이터 구조가 필요합니다. C++에서는 std :: map을 사용할 수 있습니다. 이것이 숙제 인 경우 진행 상황이 무엇인지 알려 주어야합니다. 아마도 std :: map은 아직 옵션이 아닙니다. – vz0

+0

['std :: unordered_map '] (http://en.cppreference.com/w/cpp/container/map) 또는 ['std :: unordered_map >'] (http://en.cppreference.com/w/cpp/container/unordered_map). – Cornstalks

+0

옥수수 껍질과 Concur. [이것과 비슷한 것] (http://pastebin.com/JnGnwyfp). 구문 오류가 있으면 미리 사과하십시오. 주문할 때마다'unordered_map '을'map'으로 변경하십시오.) 네, 정말 간단합니다. 간단히 말해서, 당신은 정말로 그 구조가 필요하지 않습니다. 지도는 매핑 된 값으로 사용자의 개수를 저장합니다. – WhozCraig

답변

1
ifstream inputFile("data.txt"); 
if(!inputFile.is_open()) { 
    cerr << "Can't open data.txt\n"; 
    exit(0); 
} 

map<string, int> freq; 
while(getline(inputFile, word, ' ')) 
    ++freq[word]; 
1

std::multiset 또는 std::unordered_multiset을 사용하십시오. 성능은 데이터 세트에 약간의 영향을 미치므로 실제로 최적의 튜닝을 찾으려면 약간의 튜닝이 필요합니다. 당신은 또한 같은 trie 같은 & 비교 문자열을 저장하기위한 더 최적화 된 데이터 구조를 사용할 수

#include <iostream> 
#include <unordered_set> 

int main() { 

    std::unordered_multiset<string> dict; 

    for (auto&& s : {"word1", "word2", "word1"}) { 
     dict.insert(s); 
    } 

    std::cout << dict.count("word1") << std::endl; // prints 2 
    return 0; 
} 

데이터에 따라이 & 크기를 설정하지만,이 같은 뭔가 (파일 읽기 코드 적용) 일 것 이 표준에서 사용할 수 없습니다 또는 boost 그리고 대부분의 시간은 잔인한 IMHO 조금 ( some implementations 찾을 수 있지만)입니다.