Провет, я хотел бы наити стандартный способ (СТЛ) сортировки массива пар, с возвожностью специализации способа сравнениа елементов
Что то вроде вот такого
template <class P>
struct Pair2First {
const typename P::first_type& operator() (const P &p) { return p.first; }
};
template <class P>
struct Pair2Second {
const typename P::second_type& operator() (const P &p) { return p.second; }
};
template <class Type, typename Accessor>
struct Greater {
typedef Type first_argument_type;
typedef Type second_argument_type;
typedef bool result_type;
bool operator() (const Type& lhs, const Type& rhs) const {
return accessor(lhs) > accessor(rhs);
}
Accessor accessor;
};
typedef pair<int, double> PairX;
int main()
{
vector<PairX> vec = {
make_pair(9, 6.5),
make_pair(3, 6.3),
make_pair(5, 6.9),
};
PairX p1 = make_pair(1, 2.0);
PairX p2 = make_pair(2, 1.0);
cout << Greater<PairX, Pair2First<PairX>>()(p1, p2) << endl;
stable_sort(vec.begin(), vec.end(), Pair2First<PairX>>);
}