Probleme mit der Präzision von Gleitkommaschlüsseln in Std:map
Die Verwendung von Gleitkommawerten als Schlüssel in std::map stellt aufgrund von Herausforderungen dar Einschränkungen der Gleitkomma-Präzision. Ein häufiges Problem besteht darin, dass ein Schlüssel aufgrund dieses Präzisionsproblems nicht gefunden werden kann.
Gegenmaßnahmen
-
Implementieren Sie eine benutzerdefinierte Vergleichsfunktion:
Kapseln Sie Doppelschlüssel in einer Klasse und überschreiben Sie den Operator<(...), um eine Vergleichsfunktion zu definieren, die die Gleitkommagenauigkeit verarbeitet Probleme. Dieser Ansatz verstößt jedoch gegen die Ordnungsanforderungen des Containers, was möglicherweise zu unvorhersehbarem Verhalten führt.
-
Verwenden Sie eine Multimap oder ein Multiset:
Verwenden Sie std::multimap oder std::multiset für Das Speichern von Gleitkommaschlüsseln ermöglicht mehrere Werte für jeden Schlüssel und verringert so die Gefahr von Duplikaten Schlüssel.
-
Führen Sie eine Epsilon-Toleranz ein:
Erstellen Sie eine Hilfsfunktion, die beim Abfragen des Containers einen Epsilon-Schwellenwert anwendet. Diese Funktion verwendet die Funktion equal_range, um einen Bereich von Schlüsseln zu finden, die „ausreichend nah“ am Zielschlüssel liegen, um sicherzustellen, dass der Container die Reihenfolge beibehält und gleichzeitig ungefähre Übereinstimmungen zulässt.
Überlegungen
Von der Verwendung von Gleitkommaschlüsseln in std::map oder std::set wird generell abgeraten. Aufgrund der inhärenten Fragilität von Gleitkommawerten kann dies zu unzuverlässigem Code führen. Erwägen Sie alternativ die Verwendung einer anderen Datenstruktur, die den Anforderungen an die Gleitkommagenauigkeit besser gerecht wird.
Das obige ist der detaillierte Inhalt vonWie können Sie Gleitkommaschlüssel in std::map effektiv verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!
Stellungnahme:Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn