sort函数可以用来给指定区间内的数据按照某种规则排序,在这里贴一下sort函数的代码
template inline
void sort(_RanIt _First, _RanIt _Last, _Pr _Pred)
{ // order [_First, _Last), using _Pred
_DEBUG_RANGE(_First, _Last);
_Sort_unchecked(_Unchecked(_First), _Unchecked(_Last), _Pred);
}
能够看出该函数是经过多层调用的,再深层次就不贴了大家可以打开代码库看。
使用时默认情况下是两个参数,例如
vector tmp = {2,1,3,5,7,6,4};
sort(tmp.begin(), tmp.end());
此情况下tmp内元素是按照升序排列的,打印会输出“1,2,3,4,5,6,7”。通过函数代码能看出sort函数是有三个参数的,依次是此区间的起始位、此区间的结束位的下一个和排序方式。如果想按照降序排列,就需要加入第三个参数。
第三个参数可以是一个函数,返回bool型变量。
bool cmp2(const int n1, const int n2) {
return n1 > n2;
}
sort函数使用方法为:
vector tmp = { 2,1,3,5,7,6,4 };
sort(tmp.begin(), tmp.end(), cmp2);
此情况下tmp内元素是按照降序排列的,打印会输出“7,6,5,4,3,2,1”。
第三个参数可以是一个仿函数,由结构体实现,默认的有less
和greater
,也可以自己实现。
template
struct less
{ // functor for operator<
typedef _Ty first_argument_type;
typedef _Ty second_argument_type;
typedef bool result_type;
constexpr bool operator()(const _Ty& _Left, const _Ty& _Right) const
{ // apply operator< to operands
return (_Left < _Right);
}
};
贴了一段库里面的less仿函数,就是在结构体或类中重载(),实现比较功能,和函数功能相似,也返回布尔型变量,可塑性强,适用性广。用法为:
vector tmp = { 2,1,3,5,7,6,4 };
sort(tmp.begin(), tmp.end(), less());
第三个参数也可以直接将lambda表达式形式直接写入,用法为:
vector tmp = { 2,1,3,5,7,6,4 };
sort(tmp.begin(), tmp.end(), [](int n1, int n2) {return n1 > n2; });
如果需要排序的是一个pair
vector weight = { 65,65,56,75,60,68 };;//体重
vector height = { 100,150,90,190, 95,110 }//身高
vector> human;
for (int i = 0; i < 6; i++) {
human.push_back({ height[i], weight[i] });
}
sort(human.begin(), human.end(), cmp);
for (int i = 0; i < 6; i++) {
cout << "体重为:" << human[i].first << "kg, " <<"身高为:"<< human[i].second << "cm" <
输出结果为:
体重为:75kg, 身高为:190cm
体重为:68kg, 身高为:110cm
体重为:65kg, 身高为:150cm
体重为:65kg, 身高为:100cm
体重为:60kg, 身高为:95cm
体重为:56kg, 身高为:90cm
我是没信号的法杖,发不出去信号,也接收不到信号。