您只需复制 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
有两个版本:
template <class RandomAccessIterator>
void sort ( RandomAccessIterator first, RandomAccessIterator last );
template <class RandomAccessIterator, class Compare>
void sort ( RandomAccessIterator first, RandomAccessIterator last, Compare comp );
operator <
当您的课程提供(可比较)时,可以使用第一个版本。如果您不想使用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
.