// 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
请按任意键继续. . .

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

  1. std::stable_sort 和 std::for_each 的用法[转]

    转自:http://blog.vckbase.com/zaboli/archive/2006/10/27/22886.html // Test.cpp : 定义控制台应用程序的入口点. // #inc ...

  2. std中稳定排序算法_实战c++中的vector系列--使用sort算法对vector进行排序(对vector排序、使用稳定的排序std::stable_sort())...

    写了挺多关于vector的操作了,正好工作中遇到对vector进行排序的问题,这里就讨论一下. 直接使用sort算法,那就先了解一下: template void sort (RandomAccess ...

  3. C++中std::sort/std::stable_sort/std::partial_sort的区别及使用

    某些算法会重排容器中元素的顺序,如std::sort.调用sort会重排输入序列中的元素,使之有序,它默认是利用元素类型的<运算符来实现排序的.也可以重载sort的默认排序,即通过sort的第三 ...

  4. 【c++】4.std::shared_ptr、std::make_shared、 .get() 、.data()、void *p 的用法、裸指针

    std::shared_ptr.std::make_shared. .get() ..data().void *p 的用法.裸指针 (1)shared_ptr能够记录对象被引用的次数,主要被用来管理动 ...

  5. std::tuple、std::tie(可用于结构体大小比较)、std::pair用法

    1.tuple应用: 解释:是一个元组,可包含无限多不同类型变量,pair的升级版,但没有pair得成员变量first.second. 1.1.代码: // tuple example #includ ...

  6. std::function和std::bind用法

    std::bind() std::bind 主要用于绑定生成目标函数,一般用于生成的回调函数,cocos的回退函数都是通过std::bind和std::function实现的.两个点要明白: 1.绑定 ...

  7. 【C++】浮点数的std::fixed、std::setprecision()、std::setw()用法

    [C++]50.浮点数的std::fixed.std::setprecision().std::setw()用法 C++中std::setw()的用法 1. std::fixed() #include ...

  8. 【C++】C++11的std::function和std::bind用法详解

    在设计回调函数的时候,无可避免地会接触到可回调对象.在C++11中,提供了std::function和std::bind两个方法来对可回调对象进行统一和封装. 可调用对象 C++中有如下几种可调用对象 ...

  9. C++中std::function和std::bind

    1.可调用对象 可调用对象有一下几种定义: 是一个函数指针,参考 C++ 函数指针和函数类型: 是一个具有operator()成员函数的类的对象: 可被转换成函数指针的类对象: 一个类成员函数指针: ...

最新文章

  1. Error:warning: Ignoring InnerClasses attribute for an anonymous inner class
  2. 史上最全ajax全套讲解
  3. 2015计算机硕士考研非统考的学校,2015考研计算机专业统考非统考学校统计
  4. r语言处理数据集编码_在强调编码语言或工具之前,请学习这3个基本数据概念
  5. SpringBoot整合freemarker中自定义标签获取字典表的数据
  6. 9. Git flow
  7. Node:中间件——express简单的写日志中间件
  8. 坐标计算机在线使用,经纬度换算器(度分秒计算器在线使用)
  9. 全民战“疫”,支付宝智能语音机器人到岗就位
  10. 【验证码识别】OpenCV挑战顶象滑动拼图验证码
  11. 2022年起重机械指挥特种作业证考试题库及答案
  12. 两台windows电脑通过以太网互ping
  13. mysql 判断质数_2020-09-20:如何判断一个数是质数?
  14. 深蓝学院-多传感器融合定位课程-第2章-3D激光里程计I
  15. linux 7.0 域名,RHEL 7.0已发布 CentOS 7 即将到来
  16. 文化苦旅(新版) 读后感
  17. Shrio 学习笔记(一)
  18. 重装win10操作系统(制作系统U盘方法)
  19. 【使用UltraISO修改镜像】
  20. 两招让你的年终总结PPT更出彩

热门文章

  1. 如何下载企业微信上课直播回放
  2. html盒子连续点击连续移动,html盒子整体向下移动
  3. android手机用户,ZDC:2011年Android手机用户使用行为研究报告
  4. 后端线上服务监控与报警方案
  5. 非官方新人参考之quake3入门碎解
  6. “知识共享”早期版本是什么样子?
  7. 微服务--应对每秒上万并发下的参数优化实战(实战经验)
  8. 云服务器和域名的购买—华为云
  9. Depin(Linux)下安装Tibco Ems 8.5
  10. 寄存器,锁存器,触发器,储存器 区分