Die Beantwortung dieser Frage wird dadurch erschwert, dass Programmierer gesehen haben, dass die Begriffe in bestimmten Sprachen oder Systemen, die sie verwendet haben, spezifischere Bedeutungen haben, aber die Frage verlangt einen sprachunabhängigen Vergleich "in der Theorie", den ich in Begriffen der Informatik meine .
Die Terminologie erklärt
Das Oxford University Dictionary of Computer Science listet auf:
Wörterbuch jede Datenstruktur, die eine Reihe von Elementen darstellt, die das Einfügen und Löschen von Elementen sowie den Test auf Mitgliedschaft unterstützen können
- Zum Beispiel haben wir eine Reihe von Elementen {A, B, C, D ...}, die wir einfügen und löschen konnten, und wir können abfragen: " Ist C vorhanden?" .
Der Computing Science-Begriff der Karte basiert jedoch auf dem mathematisch-sprachlichen Begriff Mapping , den das Oxford Dictionary definiert als:
Mapping Eine Operation, die jedes Element einer bestimmten Menge (die Domäne) einem oder mehreren Elementen einer zweiten Menge (dem Bereich) zuordnet.
- Als solches bietet eine Kartendatenstruktur eine Möglichkeit, von Elementen einer bestimmten Menge - bekannt als " Schlüssel " in der Karte - zu einem oder mehreren Elementen in der zweiten Menge zu gelangen, die als zugehörige " Werte " bekannt sind.
- Der Aspekt "... oder mehr Elemente im zweiten Satz" kann von einer Implementierung auf zwei verschiedene Arten unterstützt werden:
- Viele Map-Implementierungen erzwingen die Eindeutigkeit der Schlüssel und erlauben nur, dass jeder Schlüssel einem Wert zugeordnet wird. Dieser Wert kann jedoch möglicherweise eine Datenstruktur selbst sein, die viele Werte eines einfacheren Datentyps enthält, z. B. {{1, {"one". , "ichi"}, {2, {"two", "ni"}}} zeigt Werte, die aus Zeichenfolgenpaaren bestehen.
- Andere Zuordnungsimplementierungen ermöglichen doppelte Schlüssel, die jeweils denselben oder unterschiedlichen Werten zugeordnet sind. Dies erfüllt funktional den Fall "assoziiert ... jedes [Schlüssel] -Element ... mit ... mehr [mehr als einem] [Wert] -Element". Zum Beispiel {{1, "eins"}, {1, "ichi"}, {2, "zwei"}, {2, "ni"}}.
Wörterbuch und Karte kontrastiert
Unter Verwendung der oben beschriebenen strengen Comp Sci-Terminologie ist ein Wörterbuch nur dann eine Karte, wenn die Schnittstelle zusätzliche Vorgänge unterstützt, die nicht für jedes Wörterbuch erforderlich sind:
die Fähigkeit, Speicherelemente mit unterschiedlichen Schlüsseln und Wertkomponenten
die Fähigkeit, die Werte nur mit dem Schlüssel abzurufen
Eine triviale Wendung:
- Eine Kartenschnittstelle unterstützt möglicherweise nicht direkt einen Test, ob sich ein {Schlüssel, Wert} -Paar im Container befindet. Dies ist pedantisch eine Anforderung eines Wörterbuchs, in dem die Elemente zufällig {Schlüssel, Wert} -Paare sind. Eine Karte verfügt möglicherweise nicht einmal über eine Funktion zum Testen eines Schlüssels. Im schlimmsten Fall können Sie jedoch feststellen, ob ein versuchter Wertabruf nach Schlüssel erfolgreich ist oder fehlschlägt. Wenn Sie sich darum kümmern, können Sie überprüfen, ob der Schlüssel einen erwarteten Wert abgerufen hat.
Kommunizieren Sie eindeutig mit Ihrem Publikum
⚠ Wenn Sie trotz alledem ein Wörterbuch in der oben erläuterten strengen Bedeutung von Computing Science verwenden, sollten Sie nicht erwarten, dass Ihr Publikum Ihnen zunächst folgt oder beeindruckt ist, wenn Sie die Terminologie teilen und verteidigen. Die anderen Antworten auf diese Frage (und ihre positiven Stimmen) zeigen, wie wahrscheinlich es ist, dass "Wörterbuch" nach Erfahrung der meisten Programmierer gleichbedeutend mit "Karte" ist . Versuchen Sie, eine Terminologie zu wählen, die umfassender und eindeutiger verstanden wird: z
- assoziativer Container : Jeder Container, der Schlüssel / Wert-Paare mit Wertabruf und Löschung nach Schlüssel speichert
- Hash-Map : Eine Hash-Tabellenimplementierung eines zugeordneten Containers
- Hash-Set, das eindeutige Schlüssel erzwingt : Eine Hash-Tabellenimplementierung eines Wörterbuchs, in dem Elemente / Werte gespeichert werden, ohne dass sie unterschiedliche Schlüssel- / Wertkomponenten enthalten, wobei Duplikate der Elemente nicht eingefügt werden können
- balance binäre Baumkarte, die doppelte Schlüssel unterstützt : ...
Crossreferencing Comp Sci-Terminologie mit spezifischen Implementierungen
C ++ Standard Library
- Karten:
map
, multimap
, unordered_map
,unordered_multimap
- andere Wörterbuch:
set
, multiset
, unordered_set
,unordered_multiset
- Anmerkung: mit Iteratoren oder
std::find
Sie können ein Element und Test für die Mitgliedschaft in löschen array
, vector
, list
, deque
usw., aber die Container - Schnittstellen unterstützen nicht direkt , dass da ein Element zu finden , bei O (N) spektakulär ineffizient ist, in einigen Fällen insert / Erase Ineffizient, und die Unterstützung dieser Vorgänge untergräbt die absichtlich eingeschränkte API, die der Container impliziert - z. B. deque
sollten s nur das Löschen / Pop auf der Vorder- und Rückseite und nicht in Bezug auf einen Schlüssel unterstützen. Wenn der Programmierer mehr Arbeit im Code leisten muss, um die Suche zu koordinieren, wird er aufgefordert, zu einer Container-Datenstruktur mit effizienterer Suche zu wechseln.
... kann später weitere Sprachen hinzufügen / kann in ... bearbeitet werden