set容器排序
利用访函数,可以改变排序规则
一、set存放内置数据类型
代码如下:
#include <iostream>
using namespace std;
#include <set>class Mycompare {public:bool operator()(int v1, int v2) {return v1 > v2;}
};//set容器排序
void test01() {set<int >s1;s1.insert(10);s1.insert(20);s1.insert(30);s1.insert(50);s1.insert(40);for (set<int >::iterator it = s1.begin(); it != s1.end(); it++) {cout << *it << " ";}cout << endl;//指定排序规则set<int, Mycompare >s2;s2.insert(10);s2.insert(20);s2.insert(30);s2.insert(50);s2.insert(40);for (set<int, Mycompare>::iterator it = s2.begin(); it != s2.end(); it++) {cout << *it << " ";}cout << endl;}int main() {test01();return 0;
}
结果:
二、set存放自定义数据类型
代码如下:
#include <iostream>
using namespace std;
#include <set>
#include <cstring>//set容器排序,存放自定义类型
class Person {public:Person(string name, int age) {this->m_Name = name;this->m_Age = age;}string m_Name;int m_Age;
};class comparePerson {public:bool operator()(const Person &p1, const Person &p2) {//按照年龄 降序return p1.m_Age > p2.m_Age;}
};void test01() {//自定义数据类型 都会指定排序规则set<Person, comparePerson>s;Person p1("刘备", 28);Person p2("关羽", 26);Person p3("张飞", 24);Person p4("马超", 22);Person p5("赵云", 21);s.insert(p1);s.insert(p2);s.insert(p3);s.insert(p4);s.insert(p5);for (set<Person, comparePerson>::iterator it = s.begin(); it != s.end(); it++) {cout << "姓名:" << it->m_Name << " " << "年龄:" << it->m_Age << endl;}
}int main() {test01();return 0;
}
总结:
对于自定义数据类型,set必须指定排序规则才可以插入数据