C++基础知识: list结构体排序方法(一)

 说明:
         感谢luckycat 和陈梓瀚(vczh) 的留言。
         下面的代码已经在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 ;
}


你可能感兴趣的:(C++基础知识: list结构体排序方法(一))