Posted on 2010-03-06 15:42
小苏 阅读(12094)
评论(21) 编辑 收藏 引用
说明:
感谢 和 的留言。
下面的代码已经在Windows VC6/ Cygwin/ Suse Linux环境下编译测试通过.
#include <iostream>
#include <list>
#include <string>
#include <cctype>
using namespace std;
typedef unsigned int UINT32;
typedef unsigned short UINT16;
/************************************************************************/
/* 枚举定义: 性别 */
/************************************************************************/
typedef enum enumSexyType
{
SEXY_TYPE_MAN, //男性
SEXY_TYPE_WOMAN, //女性
SEXY_TYPE_GAY, //男同性恋
SEXY_TYPE_LESIBAIN, //女同性恋
SEXY_TYPE_BUTT //未知性别
}ENUM_SEXY_TYPE;
/************************************************************************/
/* 结构体定义: 人 */
/************************************************************************/
typedef struct structMan
{
UINT32 sexType; // 性别 ENUM_SEXY_TYPE
UINT16 usAge; // 年龄
string strName; // 名字
string strAddress; // 工作地址
bool operator < (const structMan &man) const
{
return usAge < man.usAge;
}
bool operator > (const structMan &man) const
{
return usAge > man.usAge;
}
structMan(UINT32 enumSexType = SEXY_TYPE_MAN,\
UINT16 usAge = 0 ,\
const string &refStrName = "" ,\
const string &refStrAddress = "")\
:
sexType(enumSexType),\
usAge(usAge) ,\
strName(refStrName),\
strAddress(refStrAddress)
{
//DO NOTHING HERE
};
}MAN;
//////////////////////////////////////////////////////////////////////////
typedef list<MAN> Family;
typedef list<MAN>::iterator FamilyIterator;
/*
* main函数 定义
*/
int main()
{
/* 初始化 */
MAN stFather(SEXY_TYPE_MAN, 28, "倒霉熊老爸", "华为技术有限公司");
MAN stMother(SEXY_TYPE_WOMAN, 27, "虾米老妈", "郑州大学第二附属医院");
MAN stBaby (SEXY_TYPE_BUTT, 0, "小天使", "未知");
Family myFamily;
/* 依次存放到list中 */
myFamily.push_back(stFather);
myFamily.push_back(stMother);
myFamily.push_back(stBaby);
/* 调用list的sort函数进行排序, 默认会使用结构体重载的<号, 进行从小到大排序 */
myFamily.sort();
printf("按年龄从小到大排序:\n");
FamilyIterator it = myFamily.begin();
while(it != myFamily.end())
{
printf("姓名: %s \n", it->strName.c_str());
it++;
}
/* 调用模板函数 greater, 传入MAN结构体, 这样会调用结构体重载的>号, 进行从大到小排序 */
greater<MAN> gt;
myFamily.sort(gt);
printf("\n按年龄从大到小排序:\n");
it = myFamily.begin();
while(it != myFamily.end())
{
printf("姓名: %s \n", it->strName.c_str());
it++;
}
return 0;
}