这篇文章列出了一些简单常用的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的比较函数是可以自定义的,利用这一点我们可以更灵活的进行排序。