Posted on 2010-03-06 15:42
小蘇 閱讀(12127)
評論(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;
}