Doğru şekilde anlaşıldığı gibi, hash tablosu uygulayarak, giriş dizgisine dayalı olarak dizin hesaplanıyor ve basit bir anahtar - değer depolaması yapıyor.Vektör ile basit hash tablosu
Yani basit hash fonksiyonu SizeOfArray önceden tanımlanmış boyutu ile işaretçileri dizidir
int hash(string name){
int index = 0;
int hash = 0;
for (int i = 0; i < name.length() ;i++){
hash += (int)name[i];
}
index = sizeOfArray % hash;
}
gibi bir şey olabilir. Bu dizin mevcut değilse, onu oluşturur. Ama bunu nasıl vektörlerle uygularım?
Vektör önceden tanımlı bir boyuta sahip değil. Otomatik olarak büyürler. Böylece sizeOfArray% karma değerinin değişmesi her zaman değişecektir.
Mantığın ardındaki tablo nedir? Büyüyen vektör/dizi ile bile endeksi hesaplamak için en iyi yöntem nedir?
Neden bir dizi dize kullanmıyoruz? Ve çarpışmalar olabileceğinden, birden fazla dizenin bir hash anahtarına bağlanabilmesi gerektiğinden, dizinin bir dizi bağlantılı listesi (veya vektörü) kullanmanız daha iyidir. Bu arada, belki de sadece öğrenmek için bunu çok faydalıdır. Ancak, hash anahtarları derleyicinizle birlikte gelen birçok STL veri yapısının temelidir. –
Karma tablolar hakkında bilgi edinmek iyi bir fikirdir, ancak öğrenme stilleriniz için değil, öğrenim amaçlı bir şey oluşturmayın, ['std :: unordered_map'] (http://en.cppreference.com/w/cpp/) kap/unordered_map). –
Öğrenmek için incelemeler yapıyorum, bir veriyi birden çok veriyi tutacak şekilde dizinde saklamak istiyorum. – Darlyn