博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
vector排序与查找
阅读量:6970 次
发布时间:2019-06-27

本文共 2836 字,大约阅读时间需要 9 分钟。

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

#include 
#include
using namespace std;#define MAX_NAME_LEN 32struct 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
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:17no:2, name:Tom, age:16no:3, name:David, age:18no:4, name:Paul, age:15Sorted by age asc:no:4, name:Paul, age:15no:2, name:Tom, age:16no:1, name:James, age:17no:3, name:David, age:18Sorted by age desc:no:3, name:David, age:18no:1, name:James, age:17no:2, name:Tom, age:16no: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

你可能感兴趣的文章
Map集合中value()方法与keySet()、entrySet()区别 《转》
查看>>
c#读取xml文件配置文件Winform及WebForm-Demo具体解释
查看>>
ApiController使用Session验证出现Null解决方案
查看>>
【剑指offer】包括min函数的栈
查看>>
点云匹配和ICP算法概述
查看>>
ACdream 1083 有向无环图dp
查看>>
大众点评的实时计算
查看>>
Thrift反序列化导致OOM(转)
查看>>
【转载】谷歌酝酿将苹果Swift作为安卓APP主要开发语言
查看>>
自定义用户登录,会话保持,登录后自动跳转原页面
查看>>
Quartz的cronTrigger表达式
查看>>
李洪强经典iOS面试题11
查看>>
Ubuntu 14 常用“快捷键”,Ctrl + Alt + F1 进入终端,按 Ctrl + Alt + F7 回到界面
查看>>
知乎上关于游戏引擎的讨论
查看>>
挂单盯盘核心——从买盘和卖盘看庄家意图
查看>>
Atitit 知识图谱的数据来源
查看>>
解决:error: Cannot fetch repo (TypeError: expected string or buffer)
查看>>
netty Failed to submit an exceptionCaught() event异常
查看>>
oracle 11g RAC 的一些基本概念(三)
查看>>
api数据接口
查看>>