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

如题所述

自己写一个比较函数就可以了,作为第三个参数传到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;
}

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

温馨提示:内容为网友见解,仅供参考
第1个回答  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();}
第2个回答  2016-06-08
#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;
}

如何利用C++\/STL vector的sort算法对元素是自定义类型进行排序
自己写一个比较函数就可以了,作为第三个参数传到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 A...

C++ 优先队列自定义排序规则
sort函数的使用方法相对简单,包含头文件后,通过两个参数指定待排序容器的迭代器范围,最后传入排序规则。STL提供了less和greater作为默认排序规则,也可以自定义规则。less和greater实际上就是关系运算符的重载,用于判断两个参数的大小关系。sort函数默认使用less实现升序排列。通过传入greater作为排序规则,可以...

怎么使用STL中algorithm的sort来对vector排序
bool rule(const int fir,const int sec){ if(fir > sec) \/\/前后元素已经满足条件 { return true;} else { return false; \/\/不满足条件,返回false;那么sort函数会处理这种情况 } 应该明白了吧 sort(vPerson.begin(),vPerson.end(),rule); \/\/调用rule规则进行排序 ...

VC++有关MFC" 基于对话框" 中如何将vector中的元素进行排序?
可以的,使用STL提供的sort方法就可以,包含<algorithm> sort(vec.begin(), vec.end(), cmp);bool cmp(const CRoomInfo& room1, const CRoomInfo& room2){ return room1.roomnum < room2.roomnum;}

C++中 std::sort 时间复杂度是多少? 是用来sort vector的
一般用的都是快速排序,最好、正常和平均时间复杂度都为O(nlog2n),2为底的对数,最坏情况就是数据已经或者近乎有序,当然就是O(n^2)了

C++ vector插入一个元素然后使用stl的sort排序效率如何
stl的sort一般来说是在各种情况下最优化的.从你这个情况的描述,stl的sort应该会默认为插入排序(insertion sort).如果你实在不放心可以自己写一个插入排序.这个复杂度最差情况应该只有O(n)当然最好情况也可以写成O(log n).

C++ STL中 Vector的基本用法
在C++的STL库中,vector是用于存储动态大小数组的一个容器。其提供了丰富的功能,简化了数组的管理。首先,我们来创建一个一维vector。通过使用`std::vector nums;`,我们定义了一个空的整型一维vector。通过`nums.push_back(value);`,可以向vector中添加元素。例如,`nums.push_back(5);`将添加整数...

c++ map基础知识、按键排序、按值排序
第一反应是利用stl中提供的sort算法实现,这个想法是好的,不幸的是,sort算法有个限制,利用sort算法只能对线性容器进行排序(如vector,list,deque)。map是一个集合容器,它里面存储的元素是pair,不是线性存储的(前面提过,像红黑树),所以利用sort不能直接和map结合进行排序。 迂回一下,把map...

C++vector容器里的2个成员怎么交换位置啊?里面的成员都是学生类对象,想...
< _Right.chengji;} int main(){ student s1;student s2;if(s1 < s2) \/\/ 现在就可以直接使用<来比较2个student了.xxxxx } 要排序的话.include <algorithm> \/\/ C++算法库 int main(){ vector <student> vec;\/\/ 各种其他代码 \/\/ 排序 std::sort(vec.begin(), vec.end());} ...

C++语法高手进
第一个元素的地址: ia或者是&ia[0]第二个元素的地址: ia 1或者是&ia[1]15. STL中vector有两种不同的使用形式:数组习惯,即使用下标操作符,注意只能操作已经存在的成员;STL习惯,使用iterator来操作,对其解引用可以访问实际的对象,也可以通过加减来移动位置。雷同与5。16. typedef用来为内置的或用户定义的数据...

相似回答