C++set容器,自定义排序方法(使用仿函数(Functor)或者普通函数指针)

您所在的位置:网站首页 定义sort函数 C++set容器,自定义排序方法(使用仿函数(Functor)或者普通函数指针)

C++set容器,自定义排序方法(使用仿函数(Functor)或者普通函数指针)

2023-12-27 18:58| 来源: 网络整理| 查看: 265

文章目录 set容器自定义排序方法:仿函数或普通函数指针代码示例1(普通内置数据类型的排序)函数指针方法仿函数方法 代码示例2(自定义对象的排序)函数指针方法仿函数方法 使用仿函数(Functor)或者普通函数指针,两种方法的比较(使用仿函数更加灵活,能方便实现更加复杂的比较)

set容器自定义排序方法:仿函数或普通函数指针

在使用STL中的set容器时,如果需要自定义排序规则,可以使用仿函数(Functor)或者普通函数指针。

使用普通函数指针时,需要定义一个比较函数,该函数接受两个参数,返回一个bool类型的值,表示两个参数的大小关系。在创建set容器时,将比较函数的函数指针作为第二个参数传递给set,从而实现按照自定义规则进行排序。

例如,如果我们需要对一个存储了学生信息的结构体按照学生的年龄进行排序,可以定义一个比较函数AgeLess,如下所示:

struct Student { string name; int age; }; bool AgeLess(const Student& s1, const Student& s2) { return s1.age // 指定排序规则 set s2(MyCompareFunc); // 函数指针方法(参数名可省略) s2.insert(10); s2.insert(40); s2.insert(20); s2.insert(30); s2.insert(50); for (set::iterator it = s2.begin(); it != s2.end(); it++) { cout public: bool operator()(int v1, int v2) { return v1 > v2; } }; void test01() { // 指定排序规则 set s2; // 仿函数方法 s2.insert(10); s2.insert(40); s2.insert(20); s2.insert(30); s2.insert(50); for (set::iterator it = s2.begin(); it != s2.end(); it++) { cout string name; int age; }; bool MyCompareFunc(const Student &s1, const Student &s2) { return s1.age > s2.age; } void test01() { // 指定排序规则 set s2(MyCompareFunc); // 函数指针方法(参数名可省略) s2.insert({"张三", 10}); s2.insert({"张五", 30}); s2.insert({"张四", 20}); s2.insert({"张七", 50}); s2.insert({"张六", 40}); for (set::iterator it = s2.begin(); it != s2.end(); it++) { cout string name; int age; }; class MyCompare { public: bool operator()(const Student &s1, const Student &s2) { return s1.age > s2.age; } }; void test01() { // 指定排序规则 set s2; // 仿函数方法 s2.insert({"张三", 10}); s2.insert({"张五", 30}); s2.insert({"张四", 20}); s2.insert({"张七", 50}); s2.insert({"张六", 40}); for (set::iterator it = s2.begin(); it != s2.end(); it++) { cout return a > b; } set s(cmp);

使用仿函数时,需要定义一个类,该类重载了()运算符,接受两个参数,返回一个bool类型的值,表示两个参数的大小关系。然后将该类的对象作为参数传递给set的构造函数,set会根据该对象的()运算符的比较结果进行排序。

示例代码如下:

struct cmp { bool operator()(int a, int b) const { return a > b; } }; set s;

使用仿函数的方式更加灵活,可以在类中定义一些成员变量和成员函数,实现更加复杂的排序方式。而使用函数指针的方式则比较简单,适用于比较简单的排序需求。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3