std::stable_sort 和 std::for_each 的用法!按结构中某一字段值大小排续!

来源:互联网 发布:node.js调用python 编辑:程序博客网 时间:2024/05/20 11:33
// Test.cpp : 定义控制台应用程序的入口点。
//

#include 
"stdafx.h"
#include 
<vector>
#include 
<string>
#include 
<stdio.h>
#include 
<time.h>
#include 
<functional>
#include 
<algorithm>
#include 
<iostream>


using std::vector;
using std::string;

// 定义一个Person类 ,包括姓、名,性别,年龄(为演示方便都有公有变量)
class Person
{
public:
    
string    sFirstName;
    
string    sLastName;
    
int        bSex;
    
int        iAge;        
};

typedef vector
<Person> VECTOR_PERSON;

string sNames[]={"李蕾蕾","李金羽","韩鹏","郑智","周海滨","崔鹏","陶伟","徐云龙","杨智","大连实德","季铭义","张耀坤","邹捷"};


// Creation of a user-defined function object
// that inherits from the unary_function base class
// std::for_each 要用到的函数
class printinfo: std::unary_function<Person, void>
{
public:
    result_type 
operator()(argument_type i)
    {
        std::cout 
<< "姓名:" << i.sLastName << i.sFirstName << " " << "年龄:" << i.iAge << std::endl;

    }
};

//std::stable_sort 要用到的比较大小的函数
//这里是按年龄比较!
bool CompareAge(Person p1,Person p2)
{
    
return p1.iAge<p2.iAge;
};

bool CompareLastName(Person p1,Person p2)
{
    
return p1.sLastName<p2.sLastName;
};


int main(int argc,char *argv[])
{
    VECTOR_PERSON vp;
    
int i=0;

    srand( (unsigned)time( NULL ) );
    
int RANGE_MIN = 18;
    
int RANGE_MAX = 50;


    
for(i=0;i<10;i++)
    {
        
int rand100 = (int)(((double) rand() / (double) RAND_MAX) * RANGE_MAX + RANGE_MIN);

        Person p;
        p.sFirstName 
= sNames[i].substr(2);
        p.sLastName  
= sNames[i].substr(0,2);
        p.bSex 
= 0;
        p.iAge 
= rand100;

        vp.push_back(p);
    }

    std::cout 
<< "随机排列:" << std::endl;
    std::for_each(vp.begin(),vp.end(),printinfo());            
//循环打印出VECTOR_PERSON的所有元素!

    std::stable_sort(vp.begin(),vp.end(),CompareAge);        
// 对 VECTOR_PERSON 中的元素按年龄排序!

    std::cout 
<< " 按年龄排列:" << std::endl;

    std::for_each(vp.begin(),vp.end(),printinfo());            
//循环打印出结果

    std::stable_sort(vp.begin(),vp.end(),CompareLastName);    
// 对 VECTOR_PERSON 中的元素按姓氏排序!

    std::cout 
<< " 按姓氏排列:" << std::endl;

    std::for_each(vp.begin(),vp.end(),printinfo());            
//循环打印出结果

    
return 0;


}

 

输出结果

 随机排列:
姓名:李蕾蕾    年龄:34
姓名:李金羽    年龄:33
姓名:韩鹏      年龄:27
姓名:郑智      年龄:65
姓名:周海滨    年龄:20
姓名:崔鹏      年龄:28
姓名:陶伟      年龄:21
姓名:徐云龙    年龄:29
姓名:杨智      年龄:23
姓名:大连实德  年龄:25


按年龄排列:
姓名:周海滨    年龄:20
姓名:陶伟      年龄:21
姓名:杨智      年龄:23
姓名:大连实德  年龄:25
姓名:韩鹏      年龄:27
姓名:崔鹏      年龄:28
姓名:徐云龙    年龄:29
姓名:李金羽    年龄:33
姓名:李蕾蕾    年龄:34
姓名:郑智      年龄:65


按姓氏排列:
姓名:崔鹏      年龄:28
姓名:大连实德  年龄:25
姓名:韩鹏      年龄:27
姓名:李金羽    年龄:33
姓名:李蕾蕾    年龄:34
姓名:陶伟      年龄:21
姓名:徐云龙    年龄:29
姓名:杨智      年龄:23
姓名:郑智      年龄:65
姓名:周海滨    年龄:20
请按任意键继续. . .

原创粉丝点击