mirror of
https://github.com/monero-project/monero.git
synced 2025-02-04 18:05:22 -05:00
add compare_func() method so user-defined comparison functions are easier to use
This commit is contained in:
parent
73298734d6
commit
c60b11f3da
@ -47,7 +47,14 @@
|
|||||||
namespace tools
|
namespace tools
|
||||||
{
|
{
|
||||||
|
|
||||||
|
/// convert a binary comparison function to a functor
|
||||||
|
template <typename T, typename ComparisonOpT = bool(const T &a, const T &b)>
|
||||||
|
inline auto compare_func(const ComparisonOpT &comparison_function)
|
||||||
|
{
|
||||||
|
return [&comparison_function](const T &a, const T &b) -> bool { return comparison_function(a, b); };
|
||||||
|
}
|
||||||
/// test if a container is sorted and unique according to a comparison criteria (defaults to operator<)
|
/// test if a container is sorted and unique according to a comparison criteria (defaults to operator<)
|
||||||
|
/// NOTE: ComparisonOpT must establish 'strict weak ordering' https://en.cppreference.com/w/cpp/named_req/Compare
|
||||||
template <typename T, typename ComparisonOpT = std::less<typename T::value_type>>
|
template <typename T, typename ComparisonOpT = std::less<typename T::value_type>>
|
||||||
bool is_sorted_and_unique(const T &container, const ComparisonOpT &ComparisonOp = ComparisonOpT{})
|
bool is_sorted_and_unique(const T &container, const ComparisonOpT &ComparisonOp = ComparisonOpT{})
|
||||||
{
|
{
|
||||||
@ -65,6 +72,13 @@ bool is_sorted_and_unique(const T &container, const ComparisonOpT &ComparisonOp
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
/// specialization for raw function pointers
|
||||||
|
template <typename T>
|
||||||
|
bool is_sorted_and_unique(const T &container,
|
||||||
|
bool (*const ComparisonOpFunc)(const typename T::value_type &a, const typename T::value_type &b))
|
||||||
|
{
|
||||||
|
return is_sorted_and_unique(container, compare_func<typename T::value_type>(ComparisonOpFunc));
|
||||||
|
}
|
||||||
/// convenience wrapper for checking if a mapped object is mapped to a key embedded in that object
|
/// convenience wrapper for checking if a mapped object is mapped to a key embedded in that object
|
||||||
/// example: std::unorderd_map<rct::key, std::pair<rct::key, rct::xmr_amount>> where the map key is supposed to
|
/// example: std::unorderd_map<rct::key, std::pair<rct::key, rct::xmr_amount>> where the map key is supposed to
|
||||||
/// reproduce the pair's rct::key; use the predicate to get the pair's rct::key element
|
/// reproduce the pair's rct::key; use the predicate to get the pair's rct::key element
|
||||||
|
Loading…
x
Reference in New Issue
Block a user