From 26f14f2a78cf4b05a45b7b8c22042159607e83da Mon Sep 17 00:00:00 2001 From: x7z4w Date: Mon, 24 Nov 2025 17:34:56 +0000 Subject: [PATCH] [core] Implicit `m2::Point` hash Signed-off-by: x7z4w --- generator/cells_merger.hpp | 5 +++-- generator/generator_tests/altitude_test.cpp | 5 +++-- libs/drape/pointers.hpp | 4 +++- libs/geometry/point2d.hpp | 19 ++++++++++++++----- .../search_tests/locality_scorer_test.cpp | 2 +- 5 files changed, 24 insertions(+), 11 deletions(-) diff --git a/generator/cells_merger.hpp b/generator/cells_merger.hpp index 05b4979cd..a0fb13e0c 100644 --- a/generator/cells_merger.hpp +++ b/generator/cells_merger.hpp @@ -5,11 +5,12 @@ #include #include -#include #include #include #include +#include "3party/skarupke/flat_hash_map.hpp" + namespace generator { namespace cells_merger @@ -67,7 +68,7 @@ private: m2::RectD Union(m2::PointI const & startXy); void Remove(m2::PointI const & minXy, m2::PointI const & maxXy); - std::map m_matrix; + ska::flat_hash_map m_matrix; int32_t m_maxX = 0; int32_t m_maxY = 0; }; diff --git a/generator/generator_tests/altitude_test.cpp b/generator/generator_tests/altitude_test.cpp index 15e86b5f1..f0aabd70d 100644 --- a/generator/generator_tests/altitude_test.cpp +++ b/generator/generator_tests/altitude_test.cpp @@ -27,10 +27,11 @@ #include "defines.hpp" -#include #include #include +#include "3party/skarupke/flat_hash_map.hpp" + namespace altitude_test { using namespace feature; @@ -72,7 +73,7 @@ TPoint3DList const kRoad4 = {{-10, 1, -1}, {-20, 6, -100}, {-20, -11, -110}}; class MockAltitudeGetter : public AltitudeGetter { public: - using TMockAltitudes = std::map; + using TMockAltitudes = ska::flat_hash_map; explicit MockAltitudeGetter(std::vector const & roads) { diff --git a/libs/drape/pointers.hpp b/libs/drape/pointers.hpp index 4b4c50a67..d5e368186 100644 --- a/libs/drape/pointers.hpp +++ b/libs/drape/pointers.hpp @@ -14,11 +14,13 @@ #include #include +#include "3party/skarupke/flat_hash_map.hpp" + // This class tracks usage of drape_ptr's and ref_ptr's class DpPointerTracker { public: - typedef std::map> TAlivePointers; + using TAlivePointers = ska::flat_hash_map>; static DpPointerTracker & Instance(); diff --git a/libs/geometry/point2d.hpp b/libs/geometry/point2d.hpp index 7363a92f1..e873f6467 100644 --- a/libs/geometry/point2d.hpp +++ b/libs/geometry/point2d.hpp @@ -4,6 +4,8 @@ #include "base/math.hpp" #include "base/matrix.hpp" +#include + #include #include #include @@ -145,11 +147,6 @@ public: y = org.y + oldX * dx.y + y * dy.y; } /// @} - - struct Hash - { - size_t operator()(Point const & p) const { return math::Hash(p.x, p.y); } - }; }; using PointF = Point; @@ -286,3 +283,15 @@ bool operator<(Point const & l, Point const & r) return l.y < r.y; } } // namespace m2 + +template +struct std::hash> +{ + size_t operator()(m2::Point const & p) const + { + size_t seed = 0; + boost::hash_combine(seed, p.x); + boost::hash_combine(seed, p.y); + return seed; + } +}; diff --git a/libs/search/search_tests/locality_scorer_test.cpp b/libs/search/search_tests/locality_scorer_test.cpp index ef138da1b..08452a50c 100644 --- a/libs/search/search_tests/locality_scorer_test.cpp +++ b/libs/search/search_tests/locality_scorer_test.cpp @@ -139,7 +139,7 @@ protected: ankerl::unordered_dense::map> m_names; ankerl::unordered_dense::map m_ranks; ankerl::unordered_dense::map m_centers; - map m_belongsToMatchedRegion; + ska::flat_hash_map m_belongsToMatchedRegion; LocalityScorer m_scorer; base::MemTrie> m_searchIndex;