std::stable_sort 和 std::for_each 的用法!按结构中某一字段值大小排续!
//
#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 的用法!按结构中某一字段值大小排续!相关推荐
- std::stable_sort 和 std::for_each 的用法[转]
转自:http://blog.vckbase.com/zaboli/archive/2006/10/27/22886.html // Test.cpp : 定义控制台应用程序的入口点. // #inc ...
- std中稳定排序算法_实战c++中的vector系列--使用sort算法对vector进行排序(对vector排序、使用稳定的排序std::stable_sort())...
写了挺多关于vector的操作了,正好工作中遇到对vector进行排序的问题,这里就讨论一下. 直接使用sort算法,那就先了解一下: template void sort (RandomAccess ...
- C++中std::sort/std::stable_sort/std::partial_sort的区别及使用
某些算法会重排容器中元素的顺序,如std::sort.调用sort会重排输入序列中的元素,使之有序,它默认是利用元素类型的<运算符来实现排序的.也可以重载sort的默认排序,即通过sort的第三 ...
- 【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能够记录对象被引用的次数,主要被用来管理动 ...
- std::tuple、std::tie(可用于结构体大小比较)、std::pair用法
1.tuple应用: 解释:是一个元组,可包含无限多不同类型变量,pair的升级版,但没有pair得成员变量first.second. 1.1.代码: // tuple example #includ ...
- std::function和std::bind用法
std::bind() std::bind 主要用于绑定生成目标函数,一般用于生成的回调函数,cocos的回退函数都是通过std::bind和std::function实现的.两个点要明白: 1.绑定 ...
- 【C++】浮点数的std::fixed、std::setprecision()、std::setw()用法
[C++]50.浮点数的std::fixed.std::setprecision().std::setw()用法 C++中std::setw()的用法 1. std::fixed() #include ...
- 【C++】C++11的std::function和std::bind用法详解
在设计回调函数的时候,无可避免地会接触到可回调对象.在C++11中,提供了std::function和std::bind两个方法来对可回调对象进行统一和封装. 可调用对象 C++中有如下几种可调用对象 ...
- C++中std::function和std::bind
1.可调用对象 可调用对象有一下几种定义: 是一个函数指针,参考 C++ 函数指针和函数类型: 是一个具有operator()成员函数的类的对象: 可被转换成函数指针的类对象: 一个类成员函数指针: ...
最新文章
- Error:warning: Ignoring InnerClasses attribute for an anonymous inner class
- 史上最全ajax全套讲解
- 2015计算机硕士考研非统考的学校,2015考研计算机专业统考非统考学校统计
- r语言处理数据集编码_在强调编码语言或工具之前,请学习这3个基本数据概念
- SpringBoot整合freemarker中自定义标签获取字典表的数据
- 9. Git flow
- Node:中间件——express简单的写日志中间件
- 坐标计算机在线使用,经纬度换算器(度分秒计算器在线使用)
- 全民战“疫”,支付宝智能语音机器人到岗就位
- 【验证码识别】OpenCV挑战顶象滑动拼图验证码
- 2022年起重机械指挥特种作业证考试题库及答案
- 两台windows电脑通过以太网互ping
- mysql 判断质数_2020-09-20:如何判断一个数是质数?
- 深蓝学院-多传感器融合定位课程-第2章-3D激光里程计I
- linux 7.0 域名,RHEL 7.0已发布 CentOS 7 即将到来
- 文化苦旅(新版) 读后感
- Shrio 学习笔记(一)
- 重装win10操作系统(制作系统U盘方法)
- 【使用UltraISO修改镜像】
- 两招让你的年终总结PPT更出彩