C++入门小馆:初识sort函数
嘿,各位技术潮人!好久不见甚是想念。生活就像一场奇妙冒险,而编程就是那把超酷的万能钥匙。此刻,阳光洒在键盘上,灵感在指尖跳跃,让我们抛开一切束缚,给平淡日子加点料,注入满满的passion。准备好和我一起冲进代码的奇幻宇宙了吗?Let's go!
我的博客:yuanManGan
我的专栏:C++入门小馆 C言雅韵集 数据结构漫游记 闲言碎语小记坊
目录
sort排序原型介绍
sort实现排序内置类型
排序数组
排序string类型
⾃定义排序
创建⽐较函数
结构体中重载()运算符-仿函数
排序结构体数据
sort排序原型介绍
sort是STL中的库函数,使用时要包含库函数<algorithm>
函数原型如下
template <class RandomAccessIterator>
void sort (RandomAccessIterator first, RandomAccessIterator last);
template <class RandomAccessIterator, class Compare>
void sort (RandomAccessIterator first, RandomAccessIterator last, Compare
comp);
第一个类型少一个参数,实现的是升序的排序,如果你想实现降序,那就得使用第二个类型了。
这里面first表示开始位置,last就是结束位置了,这里可以传迭代器或者是指针类型的变量。
compare就是比较函数了。
sort实现排序内置类型
排序数组
排序string类型
注意一下这里排序string类型时排序是按照ASCII码值来升序排序的。
⾃定义排序
如果我们想要进行降序排序呢?就要用到下列这个类型的sort函数了。
void sort (RandomAccessIterator first, RandomAccessIterator last, Compare
comp);
创建⽐较函数
这个比较函数的返回类型设置为布尔类型,通过接受两个参数,运用<或>运算符来实现功能,为真返回ture,为假返回false。
bool compare(int x, int y)
{
return x > y;//排降序
}
结构体中重载()运算符-仿函数
可以创建一个结构体类型的仿函数来实现功能
排序结构体数据
两个结构体也能进行排序,但得定一个按照什么排序
#include <iostream>
#include <algorithm>
using namespace std;
struct S
{
string name;
int age;
};
bool cmp_s_by_age(const struct S& s1, const struct S& s2)
{
return s1.age > s2.age; //按年龄降序
}
bool cmp_s_by_name(const struct S& s1, const struct S& s2)
{
return s1.name > s2.name;//按名字降序
}
//测试⾃定义⽐较函数
void test1()
{
struct S s[3] = { {"zhangsan", 20}, {"lisi", 25}, {"wangwu", 18} };
sort(s, s + 3, cmp_s_by_age);
int i = 0;
for (i = 0; i < 3; i++)
{
cout << s[i].name << " " << s[i].age << endl;
}
}
struct CmpByNameLess
{
bool operator()(const struct S& s1, const struct S& s2)
{
return s1.name < s2.name; //按照名字升序
}
};
struct CmpByAgeGreater
{
bool operator()(const struct S& s1, const struct S& s2)
{
return s1.age > s2.age; //按照年龄降序
}
};
//测试结构中重载()运算符实现⽐较
void test2()
{
struct S s[3] = { {"zhangsan", 20}, {"lisi", 25}, {"wangwu", 18} };
sort(s, s + 3, CmpByNameLess);
int i = 0;
for (i = 0; i < 3; i++)
{
cout << s[i].name << " " << s[i].age << endl;
}
}
int main()
{
test1();
test2();
return 0;
}
完结撒花!