• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > C++ 关于STL中sort()对struct排序的方法

C++ 关于STL中sort()对struct排序的方法

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c++ stl sort,c++stl基础及应用,c++ stl,c++ stl容器,c++ stl标准程序库等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

  前言

  一直没有系统去看过c++,因为懂得一些c的基本语法,在实际编程中用到c++,只能用到哪些看哪些,发现这样虽然能够完成大部分工作,但是有时候效率实在太低,比如说这节要讲的Std::sort()函数的使用,调了半天才调通。开通c/c++序列博客是记录在使用c++中一些难题,避免以后重犯错,当然以后会尽量挤出时间来较系统学习下c++。

  开发环境:QtCreator2.5.1+OpenCV2.4.3

  实验基础

  首先来看看std中的快速排序算法sort的使用方法:

  template <class RandomAccessIterator, class Compare> void sort ( RandomAccessIterator first, RandomAccessIterator last, Compare comp );

  这是一个带模板的函数,参数1和2表示需要排序的元素在随机迭代器的起始位置和结束位置,其迭代器指向的数据类型可以自己定义,常见的数据类型包括结构体,vector,类等都可以被使用。参数comp是用来决定所采用的排序是升序还是逆序的,默认情况下是升序排列。但是这种默认情况的优势是处理迭代器指向的元素为普通的数据类型,比如说整型,字符型等。如果指向的数据类型为类或者结构体,然后使用该类或者结构体中的某个元素进行排序,这时候需要自己定义排序的重载符号”<”。比如说在本次实验中该重载符号的定义为:

</div>

  

  std::sort因为函数参数不明确,所以无法推导出模板参数等.

 

  实验结果

  本次实验是基于这样一个问题的:有一些坐标点集合(2d的坐标点,坐标点之间没有重复),每个坐标点对应一个数,现在需要对这些数排序从而达到对这些坐标点排序。有尝试过把点的坐标和它对应的值放在map中,然后对map中的元素用std::sort()进行排序,但是由于开始没有发现那个重载符号的使用,所以没有调试成功。现在直接不用map了,而是用vector,vector里面放的是带有坐标点和其对应值的struct。

  本次实验是在vector中存入3个结构体对象,每个结构体中放入一个二维点和它对应的值,然后采用sort()对齐排序,排序结果如下:

  

  实验代码及注释

  main.cpp:

using namespace std;
using namespace cv;

typedef struct
{
    cv::Point point;
    long point_value;
} PAIR;

/*按照降序排列*/
bool operator<(const PAIR &x, const PAIR &y)
{
    return x.point_value > y.point_value;
}

///*按照降序排列*/
//bool compare(const PAIR &x, const PAIR &y)
//{
//    return x.point_value > y.point_value;
//}

void main()
{
    PAIR pair1, pair2, pair3;
    std::vector<PAIR> vec;
    pair1.point = Point(10, 20);
    pair1.point_value = 100;
    pair2.point = Point(70, 30);
    pair2.point_value = 99;
    pair3.point = Point(44, 76);
    pair3.point_value = 101;

    vec.push_back(pair1);
    vec.push_back(pair2);
    vec.push_back(pair3);
//    std::sort(vec.begin(), vec.end(), compare);
    std::sort(vec.begin(), vec.end());
    cout << "排序的结果为:" << endl;
    for(vector<PAIR>::iterator it = vec.begin(); it != vec.end(); ++it) {
        cout << it->point << endl;
    }

    return ;
}
</div>

  实验总结

  std::sort()函数的功能很强大,且可以对类,结构体等元素进行排序。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 浅谈c++ stl迭代器失效的问题
  • C++ STL list 遍历删除出错解决方案
  • 浅析C/C++中sort函数的用法
  • C++ 关于STL中sort()对struct排序的方法

相关文章

  • 2017-05-28C语言的isatty函数和ttyname函数以及sendmsg函数用法
  • 2017-05-28深入理解c++中virtual关键字
  • 2017-05-28typedef_struct与struct之间的区别
  • 2017-05-28C++软件添加dump调试打印日志(推荐)
  • 2022-04-30C语言编译和链接详解(通俗易懂,深入本质)
  • 2017-05-28C++中继承与组合的区别详细解析
  • 2017-05-28C++ 设置透明背景图片
  • 2017-05-28c++实现简单的线程池
  • 2017-05-28C++使用递归和非递归算法实现的二叉树叶子节点个数计算方法
  • 2017-05-28用C# 控制Windows系统音量的实现方法

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 基于排列与组合输出多少中情况详解
    • C语言+win32api写窗体应用程序
    • C++时间戳转换成日期时间的步骤和示例代码
    • string与char*转换的使用详解
    • vector list map 遍历删除制定元素 防止迭代器失效的实例
    • 常用C/C++预处理指令详解
    • 数据结构 双向链表的创建和读取详解及实例代码
    • C语言 结构体(Struct)详解及示例代码
    • C++实现自顶向下的归并排序算法
    • C++继承介绍

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有