这篇文章列出了一些简单常用的C++容器算法,C++标准库中事实上提供了很多的算法并且有详细的介绍。如果需要详细的了解这些算法可以 参考C++在线参考手册 algrithm .

1 排序

#include<algorithm> 中,调用形式为 sort(beign,end) 它的参数为一个输入区间。注意end要指向需要排序的最后一个 元素的下一个位置。参数可以是指针也可以是迭代器。

int num[10]={1,3,5,7,9,0,2,4,6,8};
sort(num,num+10);

去除重复元素

一般需要unique函数(#include<algorithm>)和sort函数共同使用。unique函数实际上是一种伪去除函数, 它可以将容器中相邻的重复元素放到容器的末尾,然后返回第一个重复元素的地址。由于重复元素相邻才能放到末尾 所以需要使用sort先进行排序。下面这个例子用来去除vector中重复的元素。

#include <iostream>
#include <vector>
#include <algorithm>
 
using namespace std;
 
int main()
{
vector<int> vec;
vector<int>::iterator iter;
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
vec.push_back(4);
 
sort(vec.begin(),vec.end());
for(vector<int>::iterator i =vec.begin();i != vec.end();++i)
{
cout<<*i<<" ";
}
cout<<endl;
iter = unique(vec.begin(),vec.end());
vec.erase(iter,vec.end());
for(iter=vec.begin(); iter!=vec.end(); ++iter)
cout<<*iter<<" ";
cout<<endl;
 
return 0;
}

3 找到vector中最大值和最小值

#include <iostream>
#include <vector>
#include <algorithm>
 
using namespace std;
 
int main()
{
vector<int> vec(5); //5行
 
int i = 0;
for(vector<int >::iterator ite=vec.begin();ite != vec.end();++ite)
{
*ite = i;
i++;
}
//vector<int>::iterator maxIte = max_element(vec.begin(),vec.end());
//cout<<*maxIte<<endl;
auto maxMin = minmax_element(vec.begin(),vec.end());
cout<<*maxMin.first<<","<<*maxMin.second<<endl;
 
return 0;
}

4 利用map比较函数进行排序

利用map在插入键值对时会自动排序,我们可以灵活的实现对数据的各种排序要求。如排序并获得排序前对应的角标索引, 不排序获得排序后的名次。下面是使用map获得排序名次的一个示例:

#include <iostream>
#include <vector>
#include <map>
 
using namespace std;
 
class a
{
public:
struct strA
{
double d;
int I;
};
};
 
int main()
{
vector<a::strA> a;
a.resize(5);
a[0].d = 2;
a[1].d = 3;
a[2].d = 0;
a[3].d = -1;
a[4].d = 8.4;
map<double,int> temp;
for(int i = 0;i < a.size();++i)
temp.insert(make_pair(a[i].d,i)); //数据放入map中会自动按键值升序排序
int i = a.size();
for(map<double,int>::iterator it = temp.begin();it != temp.end();++it)
{
a[it->second].I = i;
i--;
}
for(int i = 0;i < a.size();++i)
cout<<a[i].d<<","<<a[i].I<<endl;
 
return 0;
}

执行结果:

2,3
3,2
0,4
-1,5
8.4,1

前面是需要排序的数( strA.d ),后面是对应的排序名次( strA.i )。 实际上map的比较函数是可以自定义的,利用这一点我们可以更灵活的进行排序。

c++常用小算法的更多相关文章

  1. DotNet常用排序算法总结

    数据结构和算法对一个程序来说是至关重要的,现在介绍一下几种算法,在项目中较为常用的算法有:冒泡排序,简单选择排序,直接插入排序,希尔排序,堆排序,归并排序,快速排序等7中算法. 现在介绍选择排序算法, ...

  2. Java常用排序算法+程序员必须掌握的8大排序算法+二分法查找法

    Java 常用排序算法/程序员必须掌握的 8大排序算法 本文由网络资料整理转载而来,如有问题,欢迎指正! 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排 ...

  3. 转载部长一篇大作:常用排序算法之JavaScript实现

    转载部长一篇大作:常用排序算法之JavaScript实现 注:本文是转载实验室同门王部长的大作,找实习找工作在即,本文颇有用处!原文出处:http://www.cnblogs.com/ywang172 ...

  4. Java 常用排序算法/程序员必须掌握的 8大排序算法

    Java 常用排序算法/程序员必须掌握的 8大排序算法 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排序(直接选择排序.堆排序) 4)归并排序 5)分配 ...

  5. ACM 中常用的算法有哪些? 2014-08-21 21:15 40人阅读 评论(0) 收藏

    ACM 中常用的算法有哪些?作者: 张俊Michael 网络上流传的答案有很多,估计提问者也曾经去网上搜过.所以根据自己微薄的经验提点看法. 我ACM初期是训练编码能力,以水题为主(就是没有任何算法, ...

  6. Matlab常用小技巧及部分快捷键

    Matlab常用小技巧一: 1. m文件如果是函数,保存的文件名最好与函数名一致,这点都很清楚.不过容易疏忽的是,m文件名的命名尽量不要是简单的英文单词,最好是由大小写英文/数字/下划线等组成.原因是 ...

  7. ACM 中常用的算法有哪些?

    在网上看到别人ACM学习的心得,转载过来,源地址不记得了,当时是百度的.内容如下: 网络上流传的答案有很多,估计提问者也曾经去网上搜过.所以根据自己微薄的经验提点看法. 我ACM初期是训练编码能力,以 ...

  8. 常用排序算法的python实现和性能分析

    常用排序算法的python实现和性能分析 一年一度的换工作高峰又到了,HR大概每天都塞几份简历过来,基本上一天安排两个面试的话,当天就只能加班干活了.趁着面试别人的机会,自己也把一些基础算法和一些面试 ...

  9. 面试中常用排序算法实现(Java)

    当我们进行数据处理的时候,往往需要对数据进行查找操作,一个有序的数据集往往能够在高效的查找算法下快速得到结果.所以排序的效率就会显的十分重要,本篇我们将着重的介绍几个常见的排序算法,涉及如下内容: 排 ...

随机推荐

  1. Javascript FormData实例

    一.创建一个formData对象实例的方式 1.创建一个空对象 var formData = new FormData();//通过append方法添加数据 1 2.使用已有表单来初始化对象 //表单 ...

  2. request.getRealPath为什么会被代替

    以及前两天在网上看到的“不是工程的物理路径封装在Session里 是工程的路径被封装在了ServletContext中的问题” 很抱歉没有找到答案. 只能怪鄙人才识短浅. 在通过这次学习的过程中使我懂 ...

  3. 关于SQLserver2008索引超出了数据

    由于公司只支持了2008.不支持2012的数据库.所以安装的2008.但在对表进行操作的时候出现如下异常: 这个问题是由于本地装的2008,但IT那边的测试机上面确装的2012.所以2008连接了20 ...

  4. jquery关闭弹出层视频还在播放. 解决办法!

    $(".video-hide video#sp").trigger("pause"); 其中  video#sp  很重要 不然不行

  5. pymysql -转自https://www.cnblogs.com/chenhaiming/p/9883349.html#undefined

    PyMysql的几个重要方法 connect函数:连接数据库,根据连接的数据库类型不同,该函数的参数也不相同.connect函数返回Connection对象. cursor方法:获取操作数据库的Cur ...

  6. ---rk3288 mipi 整发(适用于新版的kernel 4.4 )

    http://www.pianshen.com/article/7245318143/ 老的Anroid 5.1 下 Linux 3.10 的数据的名字和 处理方式有不少不同 不过rk3128 还在走 ...

  7. Linux发行版:CentOS、Ubuntu、RedHat、Android、Tizen、MeeGo

    Linux,最早由Linus Benedict Torvalds在1991年开始编写.在这之前,Richard Stallman创建了Free Software Foundation(FSF)组织以及 ...

  8. Powser Design 16.5 导入Mysql数据库的bug

    在Power Designer 16.5中,想导入mysql的某个数据库,选择导入后会导入全部数据库. 解决方案: 打开powerdesigner.选择file--->reverse engin ...

  9. document.compatMode 浏览器渲染模式判定利器

    在加了DOCTYPE的页面document.compatMode输出CSS1Compat,不管加的是XHTML的还是HTML5的DOCTYPE.没有加的输出BackCompat. BackCompat ...

  10. ES6 Promise 用法转载

    Promise是一个构造函数,自己身上有all.reject.resolve这几个眼熟的方法,原型上有then.catch等同样很眼熟的方法. 那就new一个 var p = new Promise( ...