比较哈希表值并创建前N个单词的数组

时间:2017-11-02 23:49:50

标签: c++ sorting hashtable

我已经创建了一个结构的哈希表。每个结构都有数量。我很好奇我如何通过每个键和单独的链并找到最高计数并将其添加到数组中。

struct wordItem
{
    std::string word;
    int count;
    wordItem* next;
};

这是我到目前为止所拥有的。我的思考过程是将每个项目与每个项目进行比较。所以转到初始键,然后遍历每个链。 建议欢迎。

void HashTable::printTopN(int n) {

wordItem* arr[n];
wordItem* temp;
int i;
for (i=0;i<hashTableSize; i++){
    temp = hashTable[i];
    while (temp!=NULL){
        for (int j = 0; j<n; j++){
            if(arr[n]->count<temp->count&&arr[n+1]->count<temp->count){

                arr[n]=arr[n+1];
                arr[n] = temp;
            }
        }
        temp = temp->next;
    }


}
for (int k = 0; k < n; k++)

    std::cout<<arr[n]->word<<"--"<<arr[n]->count;

} 这也是我的addWord函数,用于获取更多背景信息。

void HashTable::addWord(std::string word) {
int hash_val = getHash(word);
wordItem* prev = NULL;
wordItem* entry = hashTable[hash_val];
while (entry != NULL)
{
    prev = entry;
    entry = entry->next;
}
    if (entry == NULL)
    {
        entry = new wordItem;
        entry->count = 1;
        entry->word = word;
        entry ->next = NULL;
        if (prev == NULL)
        {
            hashTable[hash_val]= entry;
        }
        else
        {
            prev->next = entry;
        }
}
    incrementCount(word);
    entry->word = word;

}

HPP fiie

struct wordItem
{
    std::string word;
    int count;
    wordItem* next;
};

const int STOPWORD_LIST_SIZE = 50;


class HashTable {

public:
    HashTable(int hashTableSize);
    ~HashTable();
    void getStopWords(char *ignoreWordFileName);
    bool isStopWord(std::string word);
    bool isInTable(std::string word);
    void incrementCount(std::string word);
    void addWord(std::string word);
    int getTotalNumberNonStopWords();
    void printTopN(int n);
    int getNumUniqueWords();
    int getNumCollisions();
    int getHash(std::string word);
private:


    wordItem* searchTable(std::string word);
    int numUniqueWords;
    int numCollisions;
    int hashTableSize;
    wordItem** hashTable;
    std::vector<std::string> vecIgnoreWords =
            std::vector<std::string>(STOPWORD_LIST_SIZE);

};

1 个答案:

答案 0 :(得分:1)

创建一个N项目数组。对于表中的每个项目,请浏览数组并检查是否current_array_item <= table_item <= next_array_item。如果是,请将数组中<= current_array_item的所有项目移一(删除数组中最小的一项),然后插入table_item代替current_array_item