#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 */

STL sort实现可迭代容器中对象的多重标准排序的更多相关文章

  1. springboot中spring.profiles.active来引入多个properties文件 & Springboot获取容器中对象

    1.    引入多个properties文件 很多时候,我们项目在开发环境和生成环境的环境配置是不一样的,例如,数据库配置,在开发的时候,我们一般用测试数据库,而在生产环境的时候,我们是用正式的数据, ...

  2. array排序(按数组中对象的属性进行排序)

    使用array.sort()对数组中对象的属性进行排序 <template> <div> <a @click="sortArray()">降序& ...

  3. STL之nth_element()(取容器中的第n大值)

    nth_element()函数 头文件:#include<algorithm> 作用:nth_element作用为求第n大的元素,并把它放在第n位置上,下标是从0開始计数的,也就是说求第0 ...

  4. STL学习二:Vector容器

    1.Vector容器简介 vector是将元素置于一个动态数组中加以管理的容器. vector可以随机存取元素(支持索引值直接存取, 用[]操作符或at()方法,这个等下会详讲). vector尾部添 ...

  5. STL sort()函数

    C++之所以得到这么多人的喜欢,是因为它既具有面向对象的概念,又保持了C语言高效的特点.STL 排序算法同样需要保持高效.因此,对于不同的需求,STL提供的不同的函数,不同的函数,实现的算法又不尽相同 ...

  6. c++ STL sort struct comp

    详细解说 STL 排序(Sort) http://www.cppblog.com/mzty/archive/2005/12/15/1770.html 详细解说 STL 排序(Sort) 作者Winte ...

  7. 疯子的算法总结(三) STL Ⅱ迭代器(iterator) + 容器

    一.迭代器(Iterator) 背景:指针可以用来遍历存储空间连续的数据结构,但是对于存储空间费连续的,就需要寻找一个行为类似指针的类,来对非数组的数据结构进行遍历. 定义:迭代器是一种检查容器内元素 ...

  8. C++ 基于STL的演讲比赛流程管理系统(sort算法+小型算法(accumulate)+内建函数对象+string字符串拼接+字符串截取+多个容器基础操作+与用户交互+文件的读写+保存+重建+整体文件数据的清空)

    1 /* 2 比赛规则: 3 学校举行一演讲比赛,共12个人参加,比赛两轮,第一轮为淘汰赛 第二轮为决赛 4 每名选手都有对应的编号:如10001~10012 5 比赛方式:分组比赛 每组6人 6 第 ...

  9. STL 查找vector容器中的指定对象:find()与find_if()算法

    1 从vector容器中查找指定对象:find()算法 STL的通用算法find()和find_if()可以查找指定对象,参数1,即首iterator指着开始的位置,参数2,即次iterator指着停 ...

随机推荐

  1. WPF界面设计—撸大师

    WPF界面设计,模仿了金山卫士,360,鲁大师的界面! <!--无边框窗体--> <Style x:Key="NoResize_window" TargetTyp ...

  2. Python基本语法_输入/输出语句详解

    目录 目录 前言 输入 raw_input input raw_input 和 input 的区别 输出 print print 基本格式化输出 print复杂格式化输出 flags标志位 width ...

  3. 使用vue做项目如何提高代码效率

    最近做了两个vue项目,算上之前做的两个项目,总共有四个vue项目的经验了,但是总体来说写的代码质量不是很高,体现在以下几点 1.代码没有高效的复用 自从使用vue做项目之后,以前使用面向过程变成的习 ...

  4. js处理表情字符且让数据库支持emoji表情符存储

    数据库处理 更换字符集utf8-->utf8mb4 JS处理 将表情转为字符: function utf16toEntities(str) { var patt=/[\ud800-\udbff] ...

  5. 项目连接oracle报错:listener does not currently know of SID given in connect descriptor

    今天练习用IDEA搭建了一个ssm框架,数据库是oracle,在执行mybatis-generator时,一直报错listener does not currently know of SID giv ...

  6. Maven从入门到精通(一)

    maven是一个项目管理工具,我的后续将会根据这个思维导图给大家由浅到深讲解Maven是如何管理我们的项目,以及我们如何更好的使用Maven maven在开发过程中功能主要有三个方面:   管理依赖 ...

  7. XSS-笔记

     Cross Site Script  跨站脚本 是一种客户端代码的注入  而命令注入.sql注入都是客户端代码的注入.   XSS攻击行为的目标为:1.窃取目标的cookie信息 2.执行CSRF脚 ...

  8. Oozie 3.3.1安装

    软件安装路径 软件名称 版本 安装路径 jdk 1.6.0_12 /usr/java/jdk1.6.0_12 maven 3.1.0 /usr/local//apache-maven-3.1.0 Oo ...

  9. 面试官:new一个对象有哪两个过程?

    Java在new一个对象的时候,会先查看对象所属的类有没有被加载到内存,如果没有的话,就会先通过类的全限定名来加载.加载并初始化类完成后,再进行对象的创建工作. 我们先假设是第一次使用该类,这样的话n ...

  10. PHP:API 接口规范完整版本

    整体规范建议采用RESTful 方式来实施. 协议 API与用户的通信协议,总是使用HTTPs协议,确保交互数据的传输安全. 域名 应该尽量将API部署在专用域名之下.https://api.exam ...