Asociativní pole
Asociativní pole (nebo také hash podle nejčastější implementace) je pole, jehož prvky nejsou indexovány pomocí posloupnosti celých čísel, ale pomocí klíčů. Klíčem může být číslo (v nesekvenční posloupnosti), textový řetězec a jiné. Některé programovací jazyky dovolují použít kombinaci sekvenčního indexování (jako u klasického pole) a asociativního indexování pole.
Význam asociativního pole spočívá v jednodušším zápisu programu, při kterém odpadají konstrukce pro vyhledávání prvku v poli.
Obsah |
Implementace [editovat]
Protože přímo z klíče nelze spočítat index (nebo adresu) prvku v poli, je zapotřebí prvek podle klíče vyhledat. Nejpoužívanější metodou je mechanismus zvaný hašovací funkce (angl. hash function).
Příklad [editovat]
Jazyk Perl [editovat]
%foo = (a=>"1", b=>"10", c=>"100"); print $foo{c}, $foo{b}, $foo{a};
vypíše 100101
Jazyk PHP [editovat]
$foo = array("a"=>"1", "b"=>"10", "c"=>"100"); echo $foo["c"].$foo["b"].$foo["a"];
vypíše 100101
Jazyk JavaScript [editovat]
foo = { a:"1", b:"10", c:"100" }; alert( foo["c"]+foo["b"]+foo["a"] );
vypíše 100101
Jazyk Python [editovat]
hash = {"a":1, "b":2, 5:"b"} print hash["a"], hash["b"], hash[5]
vypíše 1 2 b
Jazyk C++ s knihovnou Qt [editovat]
Pole je s určením typů (v příkladu je klíčem datový typ Qstring, hodnotou integer), v Qt je k dispozici i QMultiHash.
QHash<QString, int> hash; hash["a"] = 1; hash["b"] = 3; hash["c"] = 7; out<<hash["a"]<<hash["b"]<<hash["c"];
vypíše: 137
Programovací jazyky [editovat]
Známé programovací jazyky, které mají asociativní pole implementováno jako abstraktní datový typ:
Některé programovací jazyky, které nemají přímo implementovanou podporu asociativního pole, ale obsahují implementaci tohoto typu pomocí sady funkcí nebo metod třídy v knihovnách:
- C++ – STL, třída
map - C++ – knihovna Qt
- Java – The Collections Framework, třídy implemetující rozhraní
Map(HashMap,TreeMap,…)