List自定义排序问题

dgaowyuan123 2010-12-12 12:54:52
struct STUDENT
{
string name; //姓名
int num; //学号
double score; //入学总分
};

class StudentInfoList
{
public:
StudentInfoList();
virtual ~StudentInfoList();
bool CompareByName();//自定义的姓名比较
list<STUDENT> SortByName(list<STUDENT> SList);//将学生信息按姓名排序
private:
list<STUDENT>StuList; //学生信息双向链表
list<STUDENT>::iterator it; //迭代器
};

请问,SortByName方法怎么实现呢?上网也找过一些,好像都不能用
...全文
266 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
dgaowyuan123 2010-12-15
  • 打赏
  • 举报
回复
解决了,用仿函数搞定了
dgaowyuan123 2010-12-12
  • 打赏
  • 举报
回复
嗨...给你们看个程序吧
#include<iostream>
#include<vector>
#include <algorithm>
using namespace std;

struct STUDENT
{
int number;
string tel;
double score;
};

void Show(vector<STUDENT> &s)
{
vector<STUDENT>::iterator it;
for(it = s.begin(); it != s.end(); it++)
{
cout<<(*it).number<<","<<(*it).tel.c_str()<<","<<(*it).score<<endl;
}
}

bool CompareNum(const STUDENT &stud1,const STUDENT &stud2)
{
if(stud1.number < stud2.number)
{
return true;
}
else
{
return false;
}
}

bool CompareScore(const STUDENT &stud1,const STUDENT &stud2)
{
if(stud1.score < stud2.score)
{
return true;
}
else
{
return false;
}
}

int main(void)
{
STUDENT stu[3];

stu[0].number = 200104;
stu[0].score = 88.5;
stu[0].tel = "13767257756";

stu[1].number = 200101;
stu[1].score = 89.5;
stu[1].tel = "13667257756";

stu[2].number = 200102;
stu[2].score = 87.5;
stu[2].tel = "13867257756";

vector<STUDENT>stuArray;

stuArray.push_back(stu[0]);
stuArray.push_back(stu[1]);
stuArray.push_back(stu[2]);

cout<<"以下是按照添加次序显示:"<<endl;
Show(stuArray);

cout<<"以下是按照学号次序显示:"<<endl;
sort(stuArray.begin(),stuArray.end(),CompareNum);
Show(stuArray);

cout<<"以下是按照分数次序显示:"<<endl;
sort(stuArray.begin(),stuArray.end(),CompareScore);
Show(stuArray);
return 0;
}

sort(stuArray.begin(),stuArray.end(),CompareScore);//按分数排序,CompareScore就是自己定义的函数,当然可以自定义比较姓名,此时就是CompareName了。但是为什么这个函数可以这样,其原理是什么,就不懂了????
IamHalfMoon 2010-12-12
  • 打赏
  • 举报
回复
我想楼主是想要比较姓名吧?比如说Jam>Tom,对吧?中文怎么实现我没试过。但是英文的话,字符串操作中有一个strcmp,你应该可以用得到吧!可以将字符串像数值一样进行比较。
PG 2010-12-12
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 luciferisnotsatan 的回复:]
STUDENT重载<,比较Name不就行了
[/Quote]

+++1
dgaowyuan123 2010-12-12
  • 打赏
  • 举报
回复
还有,如下面的自定义排序:
bool CompareNum(const STUDENT &stud1,const STUDENT &stud2)
{
returne (stud1.number < stud2.number);
}

int main()
{
list<STUDENT> stuList;
sort(stuList.begin(),stuList.end(),CompareNum);
ShowList(stuList);
return 0;
}

这里的sort(stuList.begin(),stuList.end(),CompareNum);
中的CompareNum参数是个什么道理呢?
dgaowyuan123 2010-12-12
  • 打赏
  • 举报
回复
如此,如果要是完成那个作业,那必须得将list改成Vector,在自定义排序了,谢谢各位了。
ww884203 2010-12-12
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 force200413 的回复:]

引用 1 楼 getline 的回复:

放着标准的库不用,硬是要自己造个丑陋的轮子。。


楼主是要练一练怎么做一个链表,又不是用在开发。难道你没有自己写过一个list?
[/Quote]
同意
Force200413 2010-12-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 getline 的回复:]

放着标准的库不用,硬是要自己造个丑陋的轮子。。
[/Quote]

楼主是要练一练怎么做一个链表,又不是用在开发。难道你没有自己写过一个list?
luciferisnotsatan 2010-12-12
  • 打赏
  • 举报
回复
STUDENT重载<,比较Name不就行了
dgaowyuan123 2010-12-12
  • 打赏
  • 举报
回复
#include<list>?
dgaowyuan123 2010-12-12
  • 打赏
  • 举报
回复
楼上有高见,指条明路了
getline 2010-12-12
  • 打赏
  • 举报
回复
放着标准的库不用,硬是要自己造个丑陋的轮子。。

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧