私は構造体のハッシュテーブルを作成しました。各構造体にはカウントがあります。私はどのように各キーと別のチェーンを通過し、最高のカウントを見つけて配列に追加することができるのが不思議です。ハッシュテーブルの値を比較し、上位Nワードの配列を作成する
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
あなたの 'HashTable'クラスはどのように見えますか?また、 'printTopN()'の 'for'ループでは、' hashTableSize-1'ではなく '0'から始めなければなりません。 – cantordust
それは私がリストの裏から読むつもりだったときでした。私はそれを更新しました。 –
私は参照してください。現在のチェーンまたはテーブル全体から一番上の「N」が必要ですか? – cantordust