Bu soruyu cevaplamak, programcıların kullandıkları belirli dillerde veya sistemlerde daha belirgin anlamlar verildiğini gören karmaşıktır, ancak soru , Bilişim Bilimi terimlerinde ifade ettiğim "teoride" bir dil agnostik karşılaştırması ister. .
Açıklanan terminoloji
Oxford Üniversitesi Bilgisayar Bilimi Sözlüğü şunları listeler:
öğelerin eklenmesini ve silinmesini destekleyebilecek bir dizi öğeyi temsil eden herhangi bir veri yapısını sözlüklendirebilir ve üyelik testi yapabilir
- Örneğin, ekleyebildiğimiz ve silmeye başlayabildiğimiz bir dizi {A, B, C, D ...} öğemiz var ve "C var mı?" .
Bilişim Bilimleri kavramı haritası olsa matematiksel dilsel terim dayanmaktadır haritalama , Oxford Sözlüğü tanımlar gibidir:
eşleme Belirli bir kümenin (etki alanı) her öğesini ikinci bir kümenin (aralık) bir veya daha fazla öğesiyle ilişkilendiren işlem.
- Bu haliyle, bir harita veri yapısı, haritadaki " anahtarlar " olarak bilinen belirli bir kümenin öğelerinden, ilişkili olan " değerler " olarak bilinen ikinci kümedeki bir veya daha fazla öğeye gitmenin bir yolunu sağlar .
- "İkinci sette ... veya daha fazla öğe" yönü bir uygulama tarafından desteklenen iki ayrı yoludur:
- Birçok harita uygulaması, anahtarların benzersizliğini zorunlu kılar ve her anahtarın yalnızca bir değerle ilişkilendirilmesine izin verir, ancak bu değer, daha basit bir veri türünün birçok değerini içeren bir veri yapısı olabilir, örneğin, {{1, {"one" , "ichi"}, {2, {"iki", "ni"}}}, dize çiftlerinden oluşan değerleri gösterir.
- Diğer harita uygulamaları, her eşlemenin aynı veya farklı değerlere yinelenen tuşlara izin verir - bu da işlevsel olarak "her bir [anahtar] öğeyi ... ... birden fazla [[]] öğeyle" ilişkilendirir. Örneğin, {{1, "bir"}, {1, "ichi"}, {2, "iki"}, {2, "ni"}}.
Sözlük ve harita kontrastlı
Bu nedenle, yukarıdaki sıkı Comp Sci terminolojisini kullanarak sözlük, yalnızca arayüz her sözlük için gerekli olmayan ek işlemleri destekliyorsa bir haritadır :
Önemsiz bir bükülme:
- bir harita arayüzü, bir {key, value} çiftinin kap içinde olup olmadığını test etmeyi doğrudan desteklemeyebilir; bir haritanın bir anahtarı test etme işlevi bile olmayabilir, ancak en kötüsü, anahtar ile değer geri alma girişiminin başarılı olup olmadığını veya başarısız olup olmadığını görebilirsiniz, o zaman umursanız anahtarın beklenen bir değeri alıp almadığını kontrol edebilirsiniz.
Kitlenizle net bir şekilde iletişim kurun
All Yukarıdakilerin hepsine rağmen, yukarıda açıklanan katı Bilgi İşlem Bilimi anlamında sözlük kullanıyorsanız , kitlenizin sizi ilk başta takip etmesini beklemeyin veya terminolojiyi paylaştığınızda ve savunduğunuzda etkilenmeyin. Bu sorunun diğer cevapları (ve onların oyları) , çoğu programcının deneyiminde "sözlük" ün "harita" ile eşanlamlı olma olasılığını gösterir . Daha geniş ve açık bir şekilde anlaşılacak olan terminolojiyi seçmeye çalışın: ör.
- çağrışımsal kapsayıcı : anahtar / değer çiftlerini değer alma ve anahtarla silmeyi içeren herhangi bir kapsayıcı
- karma haritası : ilişkilendirme konteynerinin karma tablosu uygulaması
- hash set benzersiz anahtarları zorlayan : ayrı bir anahtar / değer bileşenleri içerdiğinden işlem yapmadan bir sözlük saklama elemanının / değerlerinin bir karma tablo uygulaması, buradaki elemanların kopyaları eklenemez
- yinelenen anahtarı destekleyen denge ikili ağaç haritası : ...
Özel uygulamalar ile çapraz referans Comp Sci terminolojisi
C ++ Standart Kütüphanesi
- haritalar:
map
, multimap
, unordered_map
,unordered_multimap
- Diğer sözlükler:
set
, multiset
, unordered_set
,unordered_multiset
- not: adım adım elde veya
std::find
size üyelik için bir element ve testi silebilir array
, vector
, list
, deque
öğenin bulunmasını O (N) de olağanüstü verimsiz olduğu için vs, ama konteyner arayüzleri doğrudan bazı durumlarda ekleme / silme is içinde, yani desteklemez verimsizdir ve bu işlemleri desteklemek, kabın gerektirdiği kasıtlı olarak sınırlı API'yı zayıflatır; örneğin deque
, bazı anahtarlar açısından değil, yalnızca önden ve arkadan silme / pop'u desteklemesi gerekir. Aramayı yavaşça düzenlemek için kodda daha fazla iş yapmak zorunda kalmak, programcıyı daha verimli bir arama ile bir konteyner veri yapısına geçmeye teşvik eder.
... daha sonra başka diller ekleyebilir /