#include <iostream>
#include <vector>
#include <string>
#include <math.h>
using namespace std;
struct Node{
string data;
Node* next;
Node(){
data = "";
next = NULL;
}
};
int computeHash(string s, int m){
int p = 1000000007;
int x = 263;
unsigned long long sum = 0;
unsigned long long val = 0;
for(int i = 0; i < s.length(); i++){
val = pow(x, i);
sum = (sum + s[i] * val) % p;
}
sum = sum % m;
return sum;
}
int main(){
int buckets;
cin >> buckets;
int n;
cin >> n;
string tag;
string s;
vector< vector<string> > myStore(n);
for(int i = 0; i < n; i++){
cin >> s;
myStore.at(i).push_back(s);
cin >> tag;
myStore.at(i).push_back(tag);
}
Node** arr= new Node*[buckets];
for(int i = 0; i < n; i++){
if(!myStore[i][0].compare("add")){
s = myStore[i][1];
int hash = computeHash(s,buckets);
cout << hash << endl;
}
}
return 0;
}
チェーンでハッシングを実装するプログラムを作成しようとしています。私はノードの配列を作成しようとしているので、2つの文字列が同じハッシュ値を持つ場合は追加できます。ノードの配列:初期化
しかし、ノードの配列の初期化に問題があります。私は、配列内のノードがNULLを指していると思った。しかし、私はgdbでデバッグしようとしたときに、別のことを示しています。
誰かがこの動作についてのコメントに間違いがあると説明できますか。なぜarr 1とarr [2]がヌルの代わりにいくつかのメモリ位置を指しているのはなぜですか?私もデフォルトのコンストラクタを削除しようとしましたが、同じ結果が得られました。どんな助けもありがとう。
ベクターではなくノード**の配列に問題があります。 – Phaneeth