#pragma once #include #include template struct PtrSorter { bool operator()(const T & a, const T & b) const { return *a < *b; } }; template struct PtrMemberSorter : public PtrSorter { using MT = std::decay_t; using is_transparent = MT; using PtrSorter::operator(); bool operator()(const MT & a, const T & b) const { return a < (*b).*M; } bool operator()(const T & a, const MT & b) const { return (*a).*M < b; } }; struct CompareBy { glm::length_t index; template auto operator()(const T & a, const T & b) const { return get(a) < get(b); } template auto get(const T & a) const { return a[index]; } };