c++中排序可以利用函数库提供的sort(),但是我们想给类中数据排序,就要按照需求增加创建一个函数,接下来我们来一起看看。
-
有这样一个需求,我们要对person类排序,按照整形数据从大到小排序,而且又要用
vector这个容器
-
class person{ public:int a; string s; person(int a,string s){ this->a=a; this->s=s; } person() {} };
2. 我们先从打印函数开始讲解
void myprint(vector<person>&p){
for(vector<person>::iterator it=p.begin();it!=p.end();it++)
{
cout<<it->a<<" "<<it->s<<endl;
}
}
我们都知道it这个相当于指针,也可以类似于数组,所以我们可以利用
vector<person>::iterator it=p.begin();这一段可以访问到类中的数据
3.接下来一起看看排序函数
void mysort(vector<person>&p)
{
for(int i=0;i<p.size()-1;i++)
{
vector<person>::iterator it=p.begin();
for(int j=0;j<p.size()-1-i;j++)//利用冒泡排序
{
if (it[i].a>it[i+1].a)//满足条件进行交换
{
person pq=it[i];
it[i]=it[i+1];
it[i+1]=pq;
}
it++;
}
}
}
void mysort(vector<person>&p)
{
for(int i=0;i<p.size()-1;i++)
{
// vector<person>::iterator it=p.begin();
for(int j=0;j<p.size()-1-i;j++)
{
// if (it[i].a>it[i+1].a)//满足条件进行交换
// {
// person pq=it[i];
// it[i]=it[i+1];
// it[i+1]=pq;
// }
// it++;
if(p[i].a>p[i+1].a)
{
person pq=p[i];
p[i]=p[i+1];
p[i+1]=pq;
}
}
}
}
我们先把vector容器传人函数中,在利用冒泡排序开始排序,如果想用别的排序算法也可以自己写,it[i].a>it[i+1].a这个就相当于数组,我们可以当作数组排序,排序完,再让it++。
总代码
#include<iostream>
#include<string>
#include<vector>
using namespace std;
class person{
public:int a;
string s;
person(int a,string s){
this->a=a;
this->s=s;
}
person() {}
};
void myprint(vector<person>&p){
for(vector<person>::iterator it=p.begin();it!=p.end();it++)
{
cout<<it->a<<" "<<it->s<<endl;
}
}
void mysort(vector<person>&p)
{
for(int i=0;i<p.size()-1;i++)
{
vector<person>::iterator it=p.begin();
for(int j=0;j<p.size()-1-i;j++)
{
if (it[i].a>it[i+1].a)//满足条件进行交换
{
person pq=it[i];
it[i]=it[i+1];
it[i+1]=pq;
}
it++;
}
}
}
/*void mysort(vector<person>&p)
{
for(int i=0;i<p.size()-1;i++)
{
for(int j=0;j<p.size()-1-i;j++)
{
if(p[i].a>p[i+1].a)
{
person pq=p[i];
p[i]=p[i+1];
p[i+1]=pq;
}
}
}
}*/
int main()
{
vector<person>p;
person p1(10,"a");
person p2(60,"b");
person p3(20,"c");
person p4(150,"d");
person p5(170,"e");
p.push_back(p1);
p.push_back(p2);
p.push_back(p3);
p.push_back(p4);
p.push_back(p5);
cout<<"排序前:"<<endl;
myprint(p);
cout<<endl;
cout<<"排序后:"<<endl;
mysort(p);
myprint(p);
return 0;
}