-
set容器默认排序规则为从小到大,利用仿函数,可以改变排序规则
-
分为内置数据类型排序和自定义数据类型排序
-
set与list容器排序区别:
list容器的排序是一个自带的sort成员函数,需要在sort中传一个函数名来指定排序规则;
set是默认插入数据就自动排序的,所以需要在插数据之前用仿函数指定排序规则
具体排序方法见代码:
#include#include #include using namespace std; void printfIntSet(set & s)//打印内置数据类型int数组的函数 { for (set ::iterator it = s.begin();it != s.end();it++) { cout << *it << " "; } cout << endl; } class myCompare//int数组比较大小的类,也可称为数据类型 { public: bool operator()(int v1, int v2)//仿函数的返回值是bool类型,重载了() 运算符 { return v1 > v2; } }; void test01()//set容器内置数据类型排序 { set s; s.insert(10); s.insert(100); s.insert(1); s.insert(5); s.insert(80); printfIntSet(s);//默认是从小到大 set s1;//在定义数组的时候指定排序规则 s1.insert(10); s1.insert(100); s1.insert(1); s1.insert(5); s1.insert(80); for (set ::iterator it = s1.begin();it != s1.end();it++) { cout << *it << " ";//数据输出变成降序了 } } //自定义的数据类型插入set容器如果不指定排序规则,编译器不知道该怎么排序,所以必须指定排序规则 class Person//自定义数据类型 { public: Person(string name, int age) { this->m_name = name; this->m_age = age; } string m_name; int m_age; }; class Compare//指定排序规则的仿函数 { public: bool operator()(const Person &p1, Person &p2)//加const限定不能修改传入的数据 { return p1.m_age > p2.m_age;//降序 } }; void test02()//set容器自定义数据排序 { set s; Person p1("张三", 18); Person p2("李四", 20); Person p3("王五", 19); Person p4("赵六", 27); Person p5("王八", 15); s.insert(p1); s.insert(p2); s.insert(p3); s.insert(p4); s.insert(p5); for (set ::iterator it = s.begin();it != s.end();it++) { cout << it->m_name << " " << it->m_age << endl; } } int main() { //test01();//内置数据类型排序 test02();//自定义数据类型排序 return 0; }



