#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; } |
|