私は C++ を学習しようとしており、次の構造のような単純なハッシュ テーブルのコードを記述しようとしています。
array[0][0] array[0][1] array[0][2]
key 1 value 1 value 2
array[1][0] array[1][1]
key 2 value 3
array[2][0] array[2][1] array[2][2]
key 3 value 4 value 5
動的配列の配列を意味します。さて、以下は私のコードです:
#include<iostream>
#include<conio.h>
using namespace std;
int ele [10] ;
int** arrays = new int*[10] ;
class HashTable
{
public:
HashTable()
{
for(int i = 0 ; i < 10 ; i++)
ele[i] = - 1 ; // element array stores the number of elements in column of each row
}
void put(int key, int value){
if(ele[key] == -1){
arrays[key] = new int[1];
arrays[key][0] = value ; // initialize 2nd dimention
ele[key] = 0 ;
}
else{
int num = ele[key] ;
int temp[num + 1] ;
for(int i = 0 ; i < num ; i++)
temp [i] = arrays[key][i] ;
temp[num+1] = value ;
arrays[key] = new int[num + 1] ;
for(int i = 0 ; i < num+1 ; i++) // take all the elements in an temporary array and store it back
arrays[key][i] = temp [i] ;
ele[key] = num + 1 ;
}
}
};
main()
{
HashTable object;
object.put(0 , 100);
object.put(1 , 200);
object.put(3 , 300);
object.put(3 , 3000);
object.put(3 , 30000);
object.put(5 , 500);
object.put(5 , 5000);
object.put(5 , 50000);
object.put(5 , 50);
for (int i = 0 ; i < 10 ; i++ ){
int j = ele[i] ;
cout << j << " K ";
if(j != -1){
for (int k = -1 ; k < j ; k++ ) // print the values of corresponding keys
cout << arrays[i][k] << " ";
}
}
getch();
return 0;
}
put メソッドを使用して、カスタム HashTable に値を入力します。
対応するキーの値を取得しようとしているときに、上記のコードが間違った出力値を返す理由を誰か助けてもらえますか?