转自:http://blog.vckbase.com/zaboli/archive/2006/10/27/22886.html

// 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 的用法!按结构中某一字段值大小排续!

    // Test.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <vector> #include <s ...

  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. g++ 4.4.7 template 没问题,前面应该程序问题!!
  2. 实易智能DNS单台设备QPS高达28万
  3. 数据库和缓存的双写一致性问题
  4. Python字典推导式将cookie字符串转化为字典
  5. c++编程例子_如何开始厉害的C语言编程?大神都是这样开始的!
  6. matlab图像处理——平滑滤波
  7. 【路由交换实验】OSPF
  8. 【Linux】一步一步学Linux——stat命令(77)
  9. java打印三角形,菱形。任意边长大小
  10. 计数方法应用于PTB数据集
  11. Pytorch CUDA GPU运算模型训练缓慢的一个可能原因
  12. 1250. Sea Burial
  13. 利用HtmlAgilityPack库进行HTML数据抓取
  14. Android 设置wifi共享电脑服务器资源
  15. 米家摄像头显示服务器错误,米家摄像头云服务器
  16. 校园招聘--百度笔试
  17. solidworks批量转存宏程序开发【可下载】
  18. 《SQL145题》正式发布!
  19. CSS中左上朝向三角形(Top-Left Triangle)的几种制作方式
  20. Java、JSP服装销售管理系统

热门文章

  1. lumen php命令,laravel and lumen 软删除操作
  2. 如何用禅道写出一份让开发惊叹的测试用例?测试用例库了解一下
  3. 用技术致敬每一位妈妈,B站up主用AI还原李焕英老照片动态影像
  4. IBTrACS Technical Documentation
  5. 呼叫中心管理之:让座席看见自己
  6. OpenCV2:特征匹配及其优化
  7. detach分片表非常慢的一个案例
  8. RIS前言技术讲座系列
  9. 【转】iOS游戏/应用的营销及推广技巧(2)
  10. 康拓普:大屏、VR、网页…..数据可视化有哪些应用场景?