本示例使用比较函数,函数对象进行vector的排序与查找操作。

#include <algorithm>
#include <vector>
using namespace std;#define MAX_NAME_LEN    32
struct Student
{int     no;char    name[MAX_NAME_LEN];int     age;bool operator==(const Student& other) const{return no == other.no;}bool operator==(int studentNo) const{return no == studentNo;}
};typedef std::vector<Student> TVecStudent;Student g_students[] =
{{1,     "James",    17},{2,     "Tom",      16},{3,     "David",    18},{4,     "Paul",     15},
};void InitStudent(TVecStudent& students)
{students.assign(&g_students[0], &g_students[0] + sizeof(g_students)/sizeof(g_students[0]));
}void PrintStudent(const Student& student)
{printf("no:%d, name:%s, age:%d\n", student.no, student.name, student.age);
}void PrintStudents(TVecStudent& students)
{TVecStudent::const_iterator iter = students.begin();for (; students.end() != iter; ++iter){const Student& student = *iter;PrintStudent(student);}
}// 小于比较函数运算子
bool lessStudentAge(const Student& lft, const Student& rht)
{return lft.age < rht.age;
}// 大于比较函数对象运算子
struct GreaterAgeSorter
{bool operator()(const Student& lft, const Student& rht){return lft.age > rht.age;}
};// 学号查找函数对象运算子
struct StudentNoFinder
{StudentNoFinder(int no){m_no = no;}bool operator()(const Student& student) const{return student.no == m_no;}private:int m_no;
};

测试代码:

void testVector()
{TVecStudent students;InitStudent(students);printf("Origin students:\n");PrintStudents(students);std::sort(students.begin(), students.end(), lessStudentAge);printf("\n\nSorted by age asc:\n");PrintStudents(students);std::sort(students.begin(), students.end(), GreaterAgeSorter());printf("\n\nSorted by age desc:\n");PrintStudents(students);TVecStudent::const_iterator itFind;itFind = std::find(students.begin(), students.end(), 1);if (students.end() != itFind){printf("\n\nStudent found:\n");PrintStudent(*itFind);}itFind = std::find_if(students.begin(), students.end(), StudentNoFinder(2));if (students.end() != itFind){printf("\n\nStudent found:\n");PrintStudent(*itFind);}
}int main()
{testVector();return 0;
}

输出结果:

Origin students:
no:1, name:James, age:17
no:2, name:Tom, age:16
no:3, name:David, age:18
no:4, name:Paul, age:15Sorted by age asc:
no:4, name:Paul, age:15
no:2, name:Tom, age:16
no:1, name:James, age:17
no:3, name:David, age:18Sorted by age desc:
no:3, name:David, age:18
no:1, name:James, age:17
no:2, name:Tom, age:16
no:4, name:Paul, age:15Student found:
no:1, name:James, age:17Student found:
no:2, name:Tom, age:16

转载于:https://www.cnblogs.com/shokey520/p/3790382.html

vector排序与查找相关推荐

  1. vector向量容器元素排序与查找

    1.利用标准库函数sort()对vector进行排序 参考源码: #include <algorithm> #include <vector>vector<int> ...

  2. 设计一个排序和查找系统。能够实现对给定的一组学生的借书证信息(如:卡号、姓名、系别、班号等)进行排序和查找。

    目录 实验目的 实验题目 排序模板 实验源代码 实验结果 实验目的 了解各种内部排序方法,掌握Shell排序.快速排序.堆排序,归并排序的排序方法,并将其运用到实际问题中. 实验题目 设计一个排序和查 ...

  3. 数据结构 排序和查找

    #include <stdio.h> #include <stdlib.h> #include <time.h> const int ITEMNUM = 100; ...

  4. leetcode题解:Search in Rotated Sorted Array(旋转排序数组查找)

    题目: Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7  ...

  5. 1.8 Collections类操作集合详解——排序,查找,复制

    Collections类操作集合详解 Collections 类是 Java 提供的一个操作 Set.List 和 Map 等集合的工具类. Collections 类提供了许多操作集合的静态方法,借 ...

  6. 教你用BitMap排序、查找和存储大量数据

    Bit-map的基本思想就是用一个bit位来标记某个元素对应的Value,而Key即是该元素.由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省. Bit-map概述 假设现在有这样一 ...

  7. 数据结构排序、查找算法

    前言 这是数据结构的实验四的题目. 为了自己能在繁杂的文件中顺利.快速地找到自己熟悉的排序.查找算法代码,故借CSDN平台存放本人写的代码.另外,还请有缘看到此文章的同行们能多多指点. 非常感谢. 1 ...

  8. 006-筛选分类排序搜索查找Filter-Classificatio-Sort-Search-Find-Seek-Locate

    006-筛选分类排序搜索查找Filter-Classificatio-Sort-Search-Find-Seek-Locate https://www.cnblogs.com/delphixx/p/1 ...

  9. 排序与查找 详细分析

    C语言五种基本排序算法 程序员可以使用的基本排序算法有5种: 插入排序(insertionsort.) 交换排序(exchangesOrt) 选择排序(selectionsort) 归并排序(merg ...

最新文章

  1. mysql数据库游标有什么特性_MySQL数据库游标的概念介绍和游标的使用讲解
  2. UVa1587 Box(排序)
  3. Python属性、方法和类管理系列之----属性初探
  4. Atomic Integer 原理分析-其他方法
  5. 苹果7手机严重卡顿_为什么苹果手机运存那么小,却不会卡顿?而安卓却不行!长知识了...
  6. Java枚举getDeclaringClass()方法与示例
  7. python装饰器的通俗理解_简单理解Python装饰器
  8. 【英语学习】【English L06】U03 House L6 Sharing an apartment
  9. 如何看出男朋友有没有潜力?
  10. VS2008中OGRE1.7.4下配置Hydrax-v0.5.1插件
  11. 正态分布的前世今生:正态分布的各种推导
  12. linux定时重启脚本
  13. 安卓设计模式のAdapter模式
  14. 【2020软考】软件评测师考试大纲
  15. 计算机桌面不同步,电脑时间不同步怎么回事 电脑时间不能自动更新如何修复...
  16. 使用d2rq把mysql转化为rdf_D2RQ
  17. 不义联盟2显示服务器,打开不义联盟2提示网络异常或者连接不上
  18. 解决阿里云CentOS8 yum安装appstream报错,更新yum后无法makecache的问题
  19. SonarQube代码质量管理
  20. 弗里德里克·弗朗索瓦·肖邦

热门文章

  1. [MySQL Reference Manual] 5 MySQL 服务管理
  2. F5 云应用服务促进公共云、私有云及混合云应用部署
  3. EasyUI表单验证,自定义插件验证,自定义js插件验证,远程验证,常见手机号,中英文,qq等验证规则验证...
  4. CRM成功实施如何化繁为简
  5. 最近...(2019-03-18~2019-04-03)
  6. 阿里云HBase推出全新X-Pack服务 定义HBase云服务新标准
  7. 使用 ThinkJS + Vue.js 开发博客系统
  8. MySQL的并发控制与加锁分析
  9. JAVA对象通过jackson转成json格式,属性名首字母变成小写的解决方法
  10. 递推DP HDOJ 5459 Jesus Is Here