Gibt es in irgendeiner Sprache einen Datentyp/Container, der vor dem Einfügen des Elements nach der Eindeutigkeit des Inhalts statt nach dem Wert oder Index sucht?Container, der nach der Eindeutigkeit des Inhalts sucht
1
A
Antwort
5
Ja, es heißt Set. Die meisten Sprachen implementieren sie in irgendeiner Form.
0
Das Problem damit ist, dass der Wert alles sein kann, so dass es sehr offen und nicht immer praktisch ist.
0
SQL mit einem eindeutigen Feld. setzt in Python. Dateinamen auf Dateisystemen. Hängt davon ab, wie Sie "Inhalt" definieren.
2
Sicher, einer, der in den Sinn kommt, ist Cocoas NSSet-Klasse. Die C++ - STL hat auch eine Set-Klasse.
Natürlich brauchen Sie eine Möglichkeit, ein eindeutiges Objekt zu definieren, das über den einfachen Zeiger- oder Referenzvergleich hinausgeht. Zum Beispiel werden in Cocoa zwei Objekte für den Zweck von NSSet als gleich angesehen, wenn sie auf isEqual:
mit YES
antworten und denselben Hash-Code haben.
In der Tat. Die typischste Implementierung ist ein "Hash-Satz", der durch Berechnung des Hash-Wertes jedes Objekts auf Eindeutigkeit prüft. – Noldorin
Um den zweiten Teil Ihrer Frage zu beantworten, indexieren "Hash-Set" auch die Elemente auf dem Hash-Wert von Objekten. –
Nicht nur der Hash, denn das ist nur eine notwendige, nicht eine ausreichende Bedingung. Sie müssen immer noch auf Gleichheit prüfen, wo der Hash derselbe ist. – Joey