STLファンクターを複製するだけですstd::less
http://www.cplusplus.com/reference/std/functional/less/
template <class T> struct less : binary_function <T,T,bool> {
bool operator() (const T& x, const T& y) const
{return x<y;}
};
少ない例:
#include <iostream>
#include <functional>
#include <algorithm>
struct my_struct {
int a;
bool operator< (const my_struct &s) const {
return a < s.a;
}
};
int main() {
my_struct array[10];
for (int i = 0; i < 10; ++i)
array[i].a = 10 - i;
std::sort(array, array + 10, std::less<my_struct>());
for (int i = 0; i < 10; ++i)
std::cout << array[i].a << ", ";
}
あなたはそれを書く必要はありません。アルゴリズムstd::sort
には2つのバージョンがあります。
template <class RandomAccessIterator>
void sort ( RandomAccessIterator first, RandomAccessIterator last );
template <class RandomAccessIterator, class Compare>
void sort ( RandomAccessIterator first, RandomAccessIterator last, Compare comp );
最初のバージョンは、クラスが提供する場合に使用できますoperator <
(同等)。2番目のバージョンは、使用したくない場合operator <
、または存在しない場合に使用されます。
少ない例:
#include <iostream>
#include <functional>
#include <algorithm>
struct my_struct {
int a;
bool operator< (const my_struct &s) const {
return a < s.a;
}
};
int main() {
my_struct array[10];
for (int i = 0; i < 10; ++i)
array[i].a = 10 - i;
std::sort(array, array + 10);
for (int i = 0; i < 10; ++i)
std::cout << array[i].a << ", ";
}
例でも同じ結果になります。
また、他のファンクターを使用して、などのソートアルゴリズムの動作を変更することもできますstd::greater
。