sort函数在使用中非常好用,也非常简单,而且效率与冒泡或者选择排序不是一个数量级。本文就sort函数在vector中的用法分为sort函数入门用法与自定义comp比较函数比较结构体这两个最基本的功能讲讲其用法:

1、sort入门:

使用sort需要包含algorithm头文件,完整代码如下

#include<iostream>
#include<vector>
#include<algorithm>//貌似可以不用,但最好加上。
using namespace std;
int main()
{
vector<int>v;
v.push_back();
v.push_back();
v.push_back();
v.push_back();
v.push_back();
sort(v.begin(),v.end());
int i=;
for(i=;i<;i++)
{
cout<<v[i]<<endl;
}
system("pause");
return ;
}

运行结果如下:

3
13
23
113
233
请按任意键继续. . .

可以看到结果是从小到大排序,但如果我需要从大到小排序呢?

2、改写comp从大到小排序。

加入comp函数后代码如下:

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
bool comp(const int &a,const int &b)
{
return a>b;
}
int main()
{
vector<int>v;
v.push_back();
v.push_back();
v.push_back();
v.push_back();
v.push_back();
sort(v.begin(),v.end(),comp);
int i=;
for(i=;i<;i++)
{
cout<<v[i]<<endl;
}
system("pause");
return ;
}

运行结果:

233
113
23
13
3
请按任意键继续. . .

为什么会这样呢?比较时sort函数根据comp函数进行判断输的大小,系统默认a<b时返回真,于是从小到大排,而我的comp函数设定为a>b时返回为真,那么最终得到的排序结果也相应的从小到大变成从大到小。简单吧~~

3、对结构体排序

有了comp函数我们就可以实现对任意结构体任意对象进行排序,只需要对应修改comp函数即可实现。代码如下:

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
struct ss
{
int a,b;
};
bool comp(const ss &a,const ss &b)
{
return a.a<b.a;
}
int main()
{
vector<ss>v;
ss s1,s2,s3,s4,s5;
s1.a=;s1.b=;
s2.a=;s2.b=;
s3.a=;s3.b=;
s4.a=;s4.b=;
s5.a=;s5.b=;
v.push_back(s1);
v.push_back(s2);
v.push_back(s3);
v.push_back(s4);
v.push_back(s5);
sort(v.begin(),v.end(),comp);
int i=;
for(i=;i<;i++)
{
cout<<v[i].a<<" "<<v[i].b<<endl;
}
system("pause");
return ;
}

比如ss结构体中a代表的是索引号,b代表的是索引对应的值,那么我想按索引排序,通过改写comp函数即可实现。

结果:

1 213
2 231
3 223
4 23
5 123
请按任意键继续. . .

从最简单的vector中sort用法到自定义比较函数comp后对结构体排序的sort算法的更多相关文章

  1. 转载 从最简单的vector中sort用法到自定义比较函数comp后对结构体排序的sort算法

    转载自:http://www.cnblogs.com/cj695/p/3863142.html sort函数在使用中非常好用,也非常简单,而且效率与冒泡或者选择排序不是一个数量级.本文就sort函数在 ...

  2. 【转】 从最简单的vector中sort用法到自定义比较函数comp后对结构体排序的sort算法

    sort函数在使用中非常好用,也非常简单,而且效率与冒泡或者选择排序不是一个数量级.本文就sort函数在vector中的用法分为sort函数入门用法与自定义comp比较函数比较结构体这两个最基本的功能 ...

  3. 【C++】从最简单的vector中sort用法到自定义比较函数comp后对结构体排序的sort算法

    sort函数在使用中非常好用,也非常简单,而且效率与冒泡或者选择排序不是一个数量级.本文就sort函数在vector中的用法分为sort函数入门用法与自定义comp比较函数比较结构体这两个最基本的功能 ...

  4. 【C艹】关于sort用法之重构cmp(comp)函数的笔记

    众所周知,balabalabalabala············. 所以掌握sort函数(库文件:<algorithm>)的用法还是很有必要的. 一般选手只会简单地用用sort排一排数组 ...

  5. 小球(总结sort和cmp函数、结构体排序)

    问题 N: 小球(点击) 时间限制: 1 Sec  内存限制: 128 MB                                                               ...

  6. <algorithm>里的sort函数对结构体排序

    题目描述 每天第一个到机房的人要把门打开,最后一个离开的人要把门关好.现有一堆杂乱的机房签到.签离记录,请根据记录找出当天开门和关门的人. 输入描述: 每天的记录在第一行给出记录的条目数M (M &g ...

  7. PAT 甲级 1080 Graduate Admission (30 分) (简单,结构体排序模拟)

    1080 Graduate Admission (30 分)   It is said that in 2011, there are about 100 graduate schools ready ...

  8. 网上关于sort结构体排序都不完整,我来写一个完整版的 2014-08-09 16:50 60人阅读 评论(0) 收藏

    主要参考sort函数_百度文库, 但是那篇有错误 2.结构体排序,a升,b降,c降 平板视图 打印? 01 #include <iostream> 02 #include <algo ...

  9. qsort 与sort 对结构体排序实例

    qsort 与sort 对结构体排序实例 #include<bits/stdc++.h> using namespace std; typedef struct { string book ...

随机推荐

  1. Android推送使用--文章集锦

    Android之基于百度云推送IM Android实现推送方式解决方案 Android消息推送(一)--AndroidPn(XMPP协议)Demo版到正式上线 采用XMPP协议实现Android推送 ...

  2. 51Nod 1256 求乘法逆元--扩展欧几里德

    #include<stdio.h> int exgcd(int a,int b,int &x,int &y) { ) { x=; y=; return a; } int r ...

  3. kettle基础操作

    ETL:抽取(extract).转换(transform).加载(load)至目的端的过程: Kettle是ETL工具代表之一,是pentaho中的一个数据整合的一个组件.Kettle里包括多个Job ...

  4. bzoj 1692: [Usaco2007 Dec]队列变换 ——二分+hash

    Description FJ打算带他的N(1 <= N <= 30,000)头奶牛去参加一年一度的“全美农场主大奖赛”.在这场比赛中,每个参赛者都必须让他的奶牛排成一列,然后领她们从裁判席 ...

  5. 标签 JLable 类

    标签JLable上可以添加图像,当鼠标停留在标签上时,可以显示一段提示文字. package first; import javax.swing.*; import java.awt.*; impor ...

  6. CSS3 渐变(Gradients)

    参考: http://www.runoob.com/css3/css3-gradients.html CSS3 渐变(gradients)可以让你在两个或多个指定的颜色之间显示平稳的过渡. 以前,你必 ...

  7. selenium与360极速浏览器driver配置

    1)下载浏览器对应的driver,浏览器版本与driver对应关系,网址:http://www.cnblogs.com/JHblogs/p/7699951.html:driver下载地址:http:/ ...

  8. Linux添加用户并赋予/取消管理员权限

    Ubuntu sudo adduser username # 添加用户 sudo adduser username sudo # 追加管理员权限 grep -Po '^sudo.+:\K.*$' /e ...

  9. Flex slider参数详细

    $(window).load(function() { $('.flexslider').flexslider({ animation: "fade", //String: Sel ...

  10. private,public,protected 的作用

    public  修饰的变量和函数可以在类的内部和外部都可以访问 protected   修饰的变量和函数只可以在类的内部访问,如果该类派生出子类,那么在子类中该变量和函数也可以使用 private   ...