注意事项
- 双向循环链表
- 不支持随机访问
- 因为不支持随机访问,所以也不能用全局的排序算法
sort
- 一般不支持随机访问的容器会自己提供
sort
方法 - 自定义类型要指定排序规则
排序案例
案例描述:将 Person 自定义数据类型进行排序,Person 中属性有姓名、年龄、身高
排序规则:按照年龄进行升序,如果年龄相同按照身高进行降序
class Person{
public:
Person(string name, int age, int height){
this->m_name = name;
this->m_age = age;
this->m_height = height;
}
bool operator<(const Person &p2){
if(this->m_age == p2.m_age){
return this->m_height > p2.m_height;
}
return this->m_age < p2.m_age;
}
void printPerson()const{
cout << "姓名:" << this->m_name << " 年龄:" << this->m_age << " 身高:" << this->m_height << endl;
}
private:
string m_name;
int m_age;
int m_height;
};
int main()
{
list<Person> lp;
lp.push_back(Person("刘备", 35 , 175));
lp.push_back(Person("曹操", 45 , 180));
lp.push_back(Person("孙权", 40 , 170));
lp.push_back(Person("赵云", 25 , 190));
lp.push_back(Person("张飞", 35 , 160));
lp.push_back(Person("关羽", 35 , 200));
for(const auto &p : lp){
p.printPerson();
}
cout << "排序后:" << endl;
lp.sort();
for(const auto &p : lp){
p.printPerson();
}
return 0;
}
输出:
姓名:刘备 年龄:35 身高:175
姓名:曹操 年龄:45 身高:180
姓名:孙权 年龄:40 身高:170
姓名:赵云 年龄:25 身高:190
姓名:张飞 年龄:35 身高:160
姓名:关羽 年龄:35 身高:200
排序后:
姓名:赵云 年龄:25 身高:190
姓名:关羽 年龄:35 身高:200
姓名:刘备 年龄:35 身高:175
姓名:张飞 年龄:35 身高:160
姓名:孙权 年龄:40 身高:170
姓名:曹操 年龄:45 身高:180