#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. LoadRunner 技巧之 脚本设计

    LoadRunner 技巧之 脚本设计 在做性能测试时,我们可能会遇到各种不同的业务需求与用户行为,在一个系统或网站中,每个用户的操作都不完全一样.我们如何来模拟这此用户的行为?经验与能力有限,我这里 ...

  2. django QueryDict 类型

    如果没有值,返回默认值的写法 允许有多个同名的值,但是需要用getlist 访问. 如果用常规的访问只能访问到最后一个值.

  3. 按需加载controller——angular

    一.多视图应用 AngularJS 通过路由支持多视图应用, 可以根据路由动态加载所需的视图.随着视图的不断增加, js文件会越来越多, 而 AngularJS 默认需要把全部的 js 都一次性加载, ...

  4. python学习之迭代器

    4.5 迭代器 4.5.1 可迭代对象 **字面意思分析**:可以重复的迭代的实实在在的东西. list,dict(keys(),values(),items()),tuple,str,set,ran ...

  5. jitamin配置(nginx设置)

    server { listen 66; server_name 192.168.2.253; root "/var/www/jitamin/public"; location / ...

  6. NOIP2013提高问题求解T2(关于递推与递归)

    同步发表于我的洛谷博客. NOIP2013提高问题求解2: 现有一只青蛙,初始时在n号荷叶上.当它某一时刻在k号荷叶上时,下一时刻将等概率地随机跳到1,2,--,k号荷叶之一上,直到跳到第1号荷叶为止 ...

  7. 【Qt开发】布局控件之间的间距设置

    void QLayout::setContentsMargins ( int left, int top, int right, int bottom ) Sets the left, top, ri ...

  8. Android基础内容提供者ContentProvider的使用详解(转)

    1.什么是ContentProvider 首先,ContentProvider(内容提供者)是android中的四大组件之一,但是在一般的开发中,可能使用的比较少. ContentProvider为不 ...

  9. linux free 命令 查看内存使用情况

    查看Linux服务器下的内存使用情况,可以使用命令free -m [root@localhost ~]$ free // 以KB为单位显示内存使用情况 [root@localhost ~]$ free ...

  10. vs 小贴士

    1. ubuntu上vs code root执行 sudo code --user-data-dir="~/.vscode-root" 2. 设置vs code 打开在新的标签页打 ...