如何利用C++/STL vector的sort算法对元素是自定义类型进行排序

 我来答
百度网友bb29ad2
推荐于2018-05-15 · TA获得超过2271个赞
知道小有建树答主
回答量:890
采纳率:33%
帮助的人:210万
展开全部

自己写一个比较函数就可以了,作为第三个参数传到sort函数。

下面有个小例子:

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

class AbA
{
public:
int m_nA;
int m_nB;
AbA(int a, int b) : m_nA(a), m_nB(b){}
};

ostream& operator << (ostream& os, const AbA& ra)
{
os << ra.m_nA << " " << ra.m_nB;
return os;
}

// 自己写的比较函数
bool newLess(const AbA& ra, const AbA& rb)
{
return (ra.m_nA < rb.m_nA );
}
int main()
{
vector<AbA> vecAbA;
vecAbA.push_back(AbA(1, 2));
vecAbA.push_back(AbA(7, 8));
vecAbA.push_back(AbA(5, 6));
vecAbA.push_back(AbA(3, 4));

sort(vecAbA.begin(), vecAbA.end(), newLess);
for (int i = 0; i < vecAbA.size(); i++)
{
cout << vecAbA[i] << " ";
}
return 0;
}

朋友,请【采纳答案】,您的采纳是我答题的动力,如果没有明白,请追问。谢谢。

匿名用户
2016-06-08
展开全部
你好,可以利用map实现。以下是代码,请参考://copyright@quark//date:2010-10-19#include#include#include#includeusingnamespacestd;voidpaixu(vector&ivec,inttopnum)//选出出现次数最多的topnum个,其余删除{vector::iteratoriter=ivec.begin();mapm;for(iter;iter!=ivec.end();++iter){m[*iter]++;}if(topnum>m.count()){return;}//循环遍历map对象,输出最多出现的元素for(inti=0;imaxPair;map::const_iteratoriter=m.begin();while(iter!=m.end()){if((*iter).second>maxPair.second){maxPair=*iter;}iter++;}if(maxPair.second>0){coutivec;ivec.push_back(3);ivec.push_back(2);ivec.push_back(1);ivec.push_back(2);ivec.push_back(1);ivec.push_back(1);ivec.push_back(1);paixu(ivec,2);getchar();}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友f091157ec
2016-06-08 · 超过57用户采纳过TA的回答
知道小有建树答主
回答量:108
采纳率:0%
帮助的人:93.6万
展开全部
#include <vector>
#include <iostream>
#include <string>
#include <algorithm>    //sort函数头文件

using namespace std;

class Student {
public:
int m_num;
string m_name;

public:

Student(int n,string name)
:m_num(n),m_name(name)
{

}

void display() const{
cout << "姓名:" << m_name << " ,学号:" << m_num << endl;
}
};
//自定义的比较函数,这里是对学号进行排序
static bool myCompare(const Student& a1,const Student& a2)
{
return a1.m_num <= a2.m_num;
}

int main()
{
//创建4个学生
vector<Student> classOne;
Student a1(2,"a");
classOne.push_back(a1);
Student a2(4,"b");
classOne.push_back(a2);
Student a3(5,"c");
classOne.push_back(a3);
Student a4(1,"d");
classOne.push_back(a4);

cout << "排序前:" << endl;
vector<Student>::iterator it = classOne.begin();
while (it != classOne.end())
{
it->display();
++it;
}

sort(classOne.begin(), classOne.end(),myCompare);
cout << "排序后:" << endl;
it = classOne.begin();
while (it != classOne.end())
{
it->display();
++it;
}
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式