当前位置:  编程技术>c/c++/嵌入式

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

    来源: 互联网  发布时间:2014-10-12

    本文导语:    前言   一直没有系统去看过c++,因为懂得一些c的基本语法,在实际编程中用到c++,只能用到哪些看哪些,发现这样虽然能够完成大部分工作,但是有时候效率实在太低,比如说这节要讲的Std::sort()函数的使用,调了半天...

  前言

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

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

  实验基础

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

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

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


  如果将comp定义为一个函数(网上好像很多都是用这种类似的函数),比如说该函数如下:
代码如下:

/*按照降序排列*/
bool operator y.point_value;
}

  则会报错如下错误:

  

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

 

  实验结果

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

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

  

  实验代码及注释

  main.cpp:

代码如下:

#include
#include
#include
#include
#include
#include

using namespace std;
using namespace cv;

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

/*按照降序排列*/
bool operator 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 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


    
 
 

您可能感兴趣的文章:

  • C++ STL Bitsets构造函数及成员函数解释及代码示例
  • 是不是只有C++才可以使用STL?
  • c++ stl容器set成员函数介绍及set集合插入,遍历等用法举例
  • 哪儿能下载aix4.3的c++ stl库
  • c++ stl容器vector删除(erase),遍历等基本用法介绍及头文件
  • 各位,请问怎样在linux下使用gnu c++库和stl库,请具体一点,谢谢(可开更多帖给分)!
  • C++ STL标准模板库类String成员详细列表参考及示例代码
  • 用gcc怎样编译STL的c++程序?
  • C++ stl队列Queue用法介绍:删除,插入等操作代码举例
  • C++在成员函数中使用STL的find_if函数实例
  • c++ stl栈容器stack的pop(),push()等用法介绍及头文件
  • 深入解析C++ STL中的常用容器
  • C++ STL库中priority_queue介绍,成员函数说明及priority_queue具体用法举例
  • c++ STL容器总结之:vertor与list的应用
  • c++ stl multimap基本操作使用技巧详细介绍
  • c++非变易算法-stl算法
  • c++ STL关联式容器Map成员函数介绍及查找(find()),插入(insert()),删除(erase())等操作代码举例
  • 双向队列Deque 类成员函数列表参考(c++ STL 容器)
  • c++ STL List查找遍历及各成员函数用法详细介绍
  • C++ STL MultiSet类成员函数介绍及具体用法示例
  • STL vector+sort排序和multiset/multimap排序比较
  • 浅析stl序列容器(map和set)的仿函数排序
  • stl常用算法(Algorithms)介绍(stl排序算法、非变序型队列)
  • STl中的排序算法详细解析
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • SGI的STL库 SGI STL
  • 在UNIX中可以包含STL算法吗?
  • linux完全支持C++STL嗎?
  • STL 在 UNIX 多线程 中不能用?
  • Linux系统下如何获取STL帮助
  • STL实现 EASTL
  • 在COMPAQ TRUE64 UNIX用C++编程,使用Gcc,支不支持stl?
  • 请问在linux下面编程怎样查询stl类的成员函数
  • 关于stl源代码
  • 请问如果要同时使用STL和多线程,会很麻烦么
  • linux下用c语言写的程序,其中可以使用STL模板吗?先谢谢各位
  • 如果是系统里同时存在两个不同的STL库的话会怎样?
  • STL既然是用头文件实现的,为何还需要链接-lstd?
  • uclinux上如何使用标准模板库STL?
  • STL 标准模板库 uSTL
  • 使用stl时需要什么特别配置吗?
  • 请教一个STL的使用的问题
  • linux下gcc 的stl支持,需要安装哪个库呢?
  • 我想把STL中的vector,map,set,multimap,multiset的所有操作修改成线程安全的,可以么
  • c/c++开源软件 iis7站长之家


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3