Úvod:
Map a unordered_map jsou oba asociativní kontejnery přítomné v C++ Standard Template Library (STL), které ukládají prvky tvořené kombinací hodnoty klíče a mapované hodnoty. Hlavní rozdíl mezi těmito dvěma je v tom, že zatímco mapa (jako sada) implementuje samovyvažující binární vyhledávací strom (BST) a ukládá klíče v seřazeném pořadí, unordered_map (jako unordered_set) používá pro interní implementaci hash tabulku a klíče nejsou seřazeny. .
Řešení problému:
Při programování v C++ může rozhodnutí, kdy použít mapu oproti neuspořádané mapě, významně ovlivnit efektivitu. Toto rozhodnutí do značné míry závisí na specifikacích vaší aplikace. Pokud je důležité řazení prvků, rozhodněte se pro mapu. Pokud však usilujete o rychlejší přístupové časy, unordered_map je správná cesta.
Zde diskutovaný kód bude demonstrovat rozdíl ve výkonu mezi mapou a unordered_map v C++:
#include
pomocí oboru názvů std;
void perf_test()
{
mapa
neuspořádaná_mapa
auto start = high_resolution_clock::now();
for (int i = 0; i < 1e6; i++) Map[i] += i; automatické zastavení = hodiny s vysokým_rozlišením::now(); automatické trvání = trvání_cast
cout << "Čas strávený mapou: "<< trvání.počet() << "mikrosekundy" << endl; start = hodiny s vysokým_rozlišením::nyni(); for (int i = 0; i < 1e6; i++) Neuspořádaná_mapa[i] += i; stop = hodiny s vysokým_rozlišením::nyni(); trvání = trvání_cast
cout << "Čas strávený Unordered_Map: "<< trvání.počet() << " mikrosekundy" << endl; } int main() { perf_test(); návrat 0; } [/code] Tento test výkonu obvykle odhalí, že unordered_map je rychlejší než mapa.
Pochopení mapy v C++
Mapa v C++ STL je asociativní kontejner, který ukládá prvky tvořené kombinací hodnoty klíče a namapované hodnoty. Klíčové hodnoty jsou seřazeny, což umožňuje snadné vyhledávání, přidávání a odebírání položek z mapy. Protože jsou však prvky v mapě uspořádány, je časová složitost operací vyhledávání, vkládání a mazání logaritmická ve velikosti mapy.
Ve výše uvedeném kódu vytvoříme mapu s názvem „Map“ a přidáme prvky pomocí smyčky a načasujeme operaci pomocí utility high_resolution_clock z
Unordered_map v C++
Na rozdíl od mapy provádí unordered_map průměrná případová vyhledávání, vkládání a mazání v konstantním čase bez ohledu na velikost mapy. Tohoto působivého výkonu dosahuje pomocí hashovací tabulky pro svou základní implementaci.
V našem příkladu kódu vytvoříme unordered_map s názvem „Unordered_Map“ a stejně jako v případě mapy přidáme prvky pomocí smyčky a načasujeme operaci. Ve většině případů je čas potřebný pro operace unordered_map výrazně kratší než ty, které provádí mapa.
Pochopení rozdílů a charakteristik map a unordered_map v C++ umožní vývojářům využít jejich silné stránky a vytvořit efektivní aplikace přizpůsobené danému problému.
knihovna
V obou částech, map a unordered_map poskytnutého kódu, jsme použili