¿Cuál es la diferencia entre un mapa y un diccionario?


Sé que un mapa es una estructura de datos que asigna claves a valores. ¿No es lo mismo un diccionario? ¿Cuál es la diferencia entre un mapa y un diccionario1?


1. No estoy preguntando cómo se definen en el lenguaje X o Y (que parece ser lo que generalmente la gente está preguntando aquí), quiero saber cuál es su diferencia en teoría.

Author: nbro, 2010-05-21

10 answers

Dos términos para la misma cosa:

  • " Map " es usado por Java, C++
  • "Diccionario" es utilizado por. Net, Python
  • "Matriz asociativa" es utilizado por JavaScript, PHP

"Map" es el término matemático correcto, pero se evita porque tiene un significado separado en programación funcional.

Ver aquí.

 190
Author: BlueRaja - Danny Pflughoeft,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-10 16:45:34

Uno es un término más antiguo para el otro. Normalmente el término "diccionario" fue utilizado antes de que el término matemático "mapa" tomó. Además, los diccionarios tienden a tener un tipo clave de cadena, pero eso no es 100% cierto en todas partes.

 14
Author: Edwin Buck,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-13 14:13:20

Normalmente asumo que un mapa está respaldado por una tabla hash; connota un almacén desordenado. Diccionarios connotan una tienda ordenada.

Hay un diccionario basado en árboles llamado Trie.

En Lisp, podría verse así:

(a (n (d t)) n d )

Que encapsula las palabras:

  • a
  • y
  • ant
  • an
  • ad

El recorrido desde la parte superior a la hoja produce una palabra.

 3
Author: Paul Nathan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-21 17:19:20

Mis 2 centavos.

Dictionary es una clase abstracta en Java, mientras que Map es una interfaz. Dado que Java no soporta múltiples herencias, si una clase extiende el diccionario, no puede extender ninguna otra clase.

Por lo tanto, se introdujo la interfaz del mapa.

La clase Dictionary está obsoleta y se prefiere el uso de Map.

 3
Author: Nishit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-04 06:41:49

Sí, son los mismos, puede agregar "Matriz asociativa" a la mezcla.

Usando Hashtable o a Hash ofter se refiere a la implementación.

 1
Author: OscarRyz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-21 17:34:31

Así que en un nivel puramente teórico.

Un diccionario es un valor que se puede utilizar para localizar un Valor Vinculado. Un mapa es un Valor que proporciona instrucciones sobre cómo localizar otros valores

Todas las colecciones que permiten el acceso no lineal (es decir, solo get first o get last) son un Mapa, ya que incluso una matriz simple tiene un índice que se asigna al valor correcto. Así que mientras que un diccionario es un Tipo de mapa, los mapas son un rango mucho más amplio de posibles funciones.

En la práctica a su generalmente el función de asignación que define el nombre, por lo que un HashMap es una estructura de datos mapeada que utiliza un algoritmo de hash para vincular la clave al valor, donde como un diccionario no especifica cómo se vinculan las claves a un valor, por lo que podría almacenarse a través de una lista vinculada, árbol o cualquier otro algoritmo. desde el extremo de uso, generalmente no le importa lo que el algoritmo solo que funcionan, por lo que utiliza un diccionario genérico y solo cambia a una de las otras estructuras solo cuando necesita enfore el tipo de algoritmo

 1
Author: MikeT,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-22 12:57:20

No es realmente lo mismo. Los mapas son un subconjunto del diccionario. El diccionario se define aquí como que tiene las funciones insertar, eliminar y buscar. Map as used by Java (according to this) is a dictionary with the requirement that keys mapping to values are strictly mapped as a one-to-one function. Un diccionario puede tener más de un mapa de clave a un valor, o un mapa de clave a varios valores (como encadenamiento en una tabla apresurada), por ejemplo, búsquedas de hashtags de Twitter.

Como un más ejemplo de "mundo real", buscar una palabra en un diccionario puede darnos un número de definiciones para la misma palabra, y cuando encontramos una entrada que nos apunta a otra entrada (ver otra palabra), un número de palabras para la misma lista de definiciones. En el mundo real, los mapas son mucho más amplios, lo que nos permite tener ubicaciones para nombres o nombres para coordenadas, pero también podemos encontrar un vecino más cercano u otros atributos (poblaciones, etc), por lo que en mi humilde opinión podría haber argumento para una mayor expansión del mapa escriba para posiblemente tener implementaciones basadas en gráficos, pero sería mejor asumir siempre solo el par clave-valor, especialmente porque el vecino más cercano y otros atributos al valor podrían ser solo miembros de datos del valor.

Java maps, a pesar del requisito uno a uno, puede implementar algo más como un diccionario generalizado si el valor se generaliza como una colección en sí, o si los valores son meras referencias a colecciones almacenadas en otros lugares.

Recuerde que Los mantenedores de Java no son los mantenedores de las definiciones de ADT, y que las decisiones de Java son específicamente para Java.

 1
Author: user6585083,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-13 14:47:42

Otros términos para este concepto que son bastante comunes: matriz asociativa y hash.

 0
Author: Hank Gay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-21 17:18:25

La principal diferencia es que un mapa , requiere que todas las entradas(valor y par de claves) tengan una clave única. Si se producen colisiones, es decir, cuando una nueva entrada tiene la misma clave que una entrada ya en la colección, entonces se requiere el manejo de colisiones.

Por lo general, manejamos las colisiones usando Encadenamiento separado. O Sondeo lineal.

Un diccionario permite que múltiples entradas se vinculen a la misma clave.

Cuando se ha implementado un mapa Encadenamiento separado, entonces tiende a parecerse a un diccionario.

 0
Author: Bondo Kalombo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-07 09:25:20

Estos son dos términos diferentes para el mismo concepto.
Hashtable y HashMap también se refieren al mismo concepto.

 -2
Author: SLaks,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-21 17:13:58