Das Problem der Verwendung von Doppelpunkten als Schlüssel in Karten/Sets ist Gleitkomma-Genauigkeit.Möglichkeiten mit einem Doppel als Schlüssel in einem Std-Set/Karte
Einige Leute haben vorgeschlagen, ein Epsilon in Ihrer Vergleichsfunktion hinzuzufügen, aber das bedeutet, dass Ihre Schlüssel nicht mehr die strikt schwache Reihenfolge Kriterium erfüllen. Dies bedeutet, dass Sie abhängig von der Reihenfolge des Einfügens Ihrer Elemente ein anderes Set/Map erhalten.
In dem Fall, in dem Sie Daten basierend auf doppelten Werten aggregieren/kombinieren/zusammenführen und bereit sind, ein gewisses Maß an Rundung/epsilon zuzulassen (klar, müssen Sie), ist die folgende Lösung ein gutes Idee?
alle Konvertieren Sie die Doppel (wo wir als Schlüssel bestimmt) in ganze Zahlen von ihnen durch die Präzision Faktor (zB 1e8) und Rundung auf die nächste ganze Zahl (int)i+0.5
(wenn i> 0) multipliziert wird, dann einen Satz/Karte, die Schlüssel erstellen aus diesen ganzen Zahlen. Wenn Sie die endgültigen Werte der Schlüssel extrahieren, teilen Sie die Werte durch den Präzisionsfaktor, um den doppelten Wert zurückzuerhalten (wenn auch gerundet).
Vielleicht verwenden Sie einfach eine willkürliche Genauigkeit Bibliothek (wie GMP) Datentyp als Schlüsseltyp? – PaulMcKenzie
Warum betrachten Sie Gleitkommapräzision als ein Problem, wenn Sie Doubletten als Schlüssel in einer Baum- oder Hashtabellenstruktur verwenden? Es funktioniert, solange Sie keine NaNs als Schlüssel verwenden, und es funktioniert sogar genau so, wie Sie es erwarten. – tmyklebu
Ich frage mich, welche Art von Problem möglicherweise Fließkommawerte in Sätzen oder Karten erfordern könnte. Sätze und Zuordnungen sind eine natürliche Anpassung für diskrete Daten, Gleitkommawerte sind gut für kontinuierliche Daten. –