私はC++の線形および二次探索のハッシュテーブルの実装に取り組んでいます。 Hash.cppには、動作するlinearProb(int key)関数とquadProb関数があります。 main.hppから別々に呼び出すと、正しいハッシュテーブルが出力されますが、コンパイル時に線形と二次の両方のテーブルの結果を見たいと思います。C++の印刷配列
これは(quadProbが似ています)
void Hash::linearProb(int key){
int i, count = 0;
Hash h;
//if it is empty, place it there
if (a[key % tableSize] == -1)
a[key % tableSize] = key;
else{
i = 0;
//until finding an empty slot, but don't loop around
while (i < tableSize && a[i] != -1){
count++;
i++;
}
if(count == tableSize){
cout<<key<<" could not be inserted in the table\n";
exit(1);
}
//when there's a collision increase i by 1 until finding empty slot
for(i = (key % tableSize+1) % tableSize; i <tableSize; i++){
if(a[i] == -1){
a[i] = key;
break;
}
}
}
}
私linearProbであると私は、この
ようmain.cppにそれを呼び出す場合、私はまたHash.cppvoid Hash::print(){
int i;
//cout<<"Hash Table with Linear Probing"<<endl;
cout<<"\n Result Hash Table: "<<endl;
for(i = 0; i < tableSize; i++){
cout<<"\n"<<i;
if(a[i] != -1){
cout<<" "<< a[i];
}
}
cout<<"\n";
}
の印刷を()持っています
int main(){
int key;
Hash h;
//take in .txt file
std::fstream file;
file.open("keys.txt");
while(!file.eof()){
file >> key;
if(key != -1){
h.linearProb(key);
//h.quadProb(key);
}
}
file.close();
if(key == -1){
h.print();
}
}
私のプロービングが動作するのがわかりますが、linearProbをテストするためにquadProbをコメントアウトしたことに気付きました。私は両方のテーブルを同時に印刷したいと思う。これを行うために、私はmainから呼び出すのではなく、各プロービング関数でprint()を呼び出そうとしました。
これは私が試みたものです。私は
while(!file.eof()){
file >> key;
h.linearProb(key);
//h.quadProb(key);
}
file.close();
に()メイン変更とlinearProb(int型のキー)
void Hash::linearProb(int key){
int i, count = 0;
Hash h;
if(key == -1){
h.print();
exit(1);
}
}
に追加しかし、これは[i]はせずに0〜9をプリントアウト。私がprint()に入ったときに何がテストされたのか、それは私にすべてのi値が-1の[i]を与え、何も印刷しないことにつながります。なぜこれが起こっているのか、私は本当に混乱しています。 main()からprint()を呼び出したときにprint()がうまく行かないのはなぜですか?
私はあなたのコードを読んでちょっと混乱していますが、あなたは[最小、完全で、検証可能な例](http://stackoverflow.com/help/mcve)を提供してください。 – Steeve
コードを挿入するとき:書式設定されたコードを挿入し、すべてを選択して{}アイコン(コードサンプル) – stefaanv