diff --git a/src/util/ue2_containers.h b/src/util/ue2_containers.h index 672cb811..75e0a0a4 100644 --- a/src/util/ue2_containers.h +++ b/src/util/ue2_containers.h @@ -611,6 +611,21 @@ public: return comp(); } + class value_compare { + friend class flat_map; + protected: + Compare c; + value_compare(Compare c_in) : c(c_in) {} + public: + bool operator()(const value_type &lhs, const value_type &rhs) { + return c(lhs.first, rhs.first); + } + }; + + value_compare value_comp() const { + return value_compare(comp()); + } + // Operators. bool operator==(const flat_map &a) const { diff --git a/unit/internal/flat_map.cpp b/unit/internal/flat_map.cpp index 966a5d8f..6a81bbfe 100644 --- a/unit/internal/flat_map.cpp +++ b/unit/internal/flat_map.cpp @@ -211,6 +211,7 @@ TEST(flat_map, custom_compare) { ASSERT_EQ(10, f.rbegin()->second); ASSERT_TRUE(flat_map_is_sorted(f)); + ASSERT_TRUE(std::is_sorted(f.begin(), f.end(), f.value_comp())); ASSERT_TRUE(flat_map_is_sorted_cmp(f, std::greater())); }