分享

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

 cupid 2014-11-05


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



    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多