STL sort实现可迭代容器中对象的多重标准排序
2024-10-07 05:19:39
#include <iostream>
#include <string>
#include <vector>
#include <algorithm> using namespace std; class Cat{
public:
int id;
string name;
int age;
Cat(int i,string n,int a){
id = i;
name =n;
age = a; }
}; /*
实现自己的比较函数:
格式:
bool compName(Obj1, Obj2);
注意:
1. 函数必须返回bool值
2. 函数如果返回true就表示该参数或者标准按这种顺序排序(即不用swap),返回false即会swap
3. 函数作为sort(beginIndex,endIndex,compName)的第三个参数; */
bool myCompare(Cat *a,Cat* b){
//先按id从小到大排序
if(a->id<b->id)return true;
else if(a->id>b->id)return false;
else {
//id相同
//按name的字典序排序
if(a->name.compare(b->name)<)return true;
else if(a->name.compare(b->name)>)return false;
else{
//name相同,按age从小到大排序
if(a->age<b->age)return true;
if(a->age>b->age)return false;
else{
//age也相同
//返回true
return true;
}
} }
} int main(){
vector<Cat*> v ;
v.push_back(new Cat(,"Jim",));
v.push_back(new Cat(,"Jima",));
v.push_back(new Cat(,"Jimb",));
v.push_back(new Cat(,"Jimc",));
v.push_back(new Cat(,"J",));
v.push_back(new Cat(,"Jim",));
v.push_back(new Cat(,"Jizzz",));
v.push_back(new Cat(,"Jim",));
v.push_back(new Cat(,"Jim",));
sort(begin(v),end(v),myCompare);
for(int i=;i<v.size();i++){
Cat * c = v[i];
cout<<c->id<<" "<<c->name<<" "<<c->age<<endl;
} } /*
output:
1 J 1
1 Jim 1
1 Jima 1
1 Jimb 1
1 Jimc 1
2 Jim 1
2 Jim 2
2 Jim 3
2 Jizzz 1 */
最新文章
- MAC破解软件
- Binary Tree Longest Consecutive Sequence
- YTU 2973: C语言习题5.25--文件操作2
- sql语句 优化技巧
- linux系统中如何进入退出vim编辑器,方法及区别
- Java学习笔记之:Java封装
- 基于ASP.NET的comet简单实现 http长连接,IAsyncResult
- 对依赖倒置原则(DIP)及Ioc、DI、Ioc容器的一些理解(转)
- JS创建类和对象(好多方法哟!)
- 服务确定(服务类收货ML81N)
- docker iotop :OSError: Netlink error: No such file or directory
- 切换npm源地址
- 第六课 Html5常用标签 html5学习1
- phantomjs 了解
- PHP二叉树
- ES练习代码
- WebService之Axis2(1):用POJO实现0配置的WebService
- Neutron 理解 (2): 使用 Open vSwitch + VLAN 组网 [Neutron Open vSwitch + VLAN Virtual Network]
- DWZ SSH2 菜单树--使用Struts2 标签(iterator/set/if 组合使用)
- eclipse/myeclipse添加插件3种方式