sort对结构体进行排序

转载 2016年05月31日 15:00:34
std::sort()函数的功能很强大,且可以对类,结构体等元素进行排序。
首先来看看std中的快速排序算法sort的使用方法:
  template <class RandomAccessIterator, class Compare> void sort ( RandomAccessIterator first, RandomAccessIterator last, Compare comp );
  这是一个带模板的函数,参数1和2表示需要排序的元素在随机迭代器的起始位置和结束位置,其迭代器指向的数据类型可以自己定义,常见的数据类型包括结构体,vector,类等都可以被使用。参数comp是用来决定所采用的排序是升序还是逆序的,默认情况下是升序排列。但是这种默认情况的优势是处理迭代器指向的元素为普通的数据类型,比如说整型,字符型等。如果指向的数据类型为类或者结构体,然后使用该类或者结构体中的某个元素进行排序,这时候需要自己定义排序的重载符号”<”。比如说在本次实验中该重载符号的定义为:
/*按照降序排列*/
bool compare(const PAIR &x, const PAIR &y)
{
return x.point_value > y.point_value;
}

  如果将comp定义为一个函数(网上好像很多都是用这种类似的函数),比如说该函数如下:
/*按照降序排列*/
bool operator<(const PAIR &x, const PAIR &y)
{
return x.point_value > y.point_value;
}

  则会报错如下错误:
  
  std::sort因为函数参数不明确,所以无法推导出模板参数等.
  实验结果
  本次实验是基于这样一个问题的:有一些坐标点集合(2d的坐标点,坐标点之间没有重复),每个坐标点对应一个数,现在需要对这些数排序从而达到对这些坐标点排序。有尝试过把点的坐标和它对应的值放在map中,然后对map中的元素用std::sort()进行排序,但是由于开始没有发现那个重载符号的使用,所以没有调试成功。现在直接不用map了,而是用vector,vector里面放的是带有坐标点和其对应值的struct。
  本次实验是在vector中存入3个结构体对象,每个结构体中放入一个二维点和它对应的值,然后采用sort()对齐排序,排序结果如下:
/*按照降序排列*/
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;

  

sort之结构体排序1

CSU1409: 集合的并 Description 给出两个由整数组成的集合A, B,计算A ∪ B中包含多少个整数。 Input 输入的第一行包含一个整数T (T > 0),表示一共有T组测试数据。...
  • zw1996
  • zw1996
  • 2016年04月12日 16:46
  • 5290

C语言结构体排序方法

#include "stdafx.h" #include #include #include using namespace std; struct student { string name;//...

c++如何对自定义结构体排序

struct内部排序 #include #include using namespace std; typedef struct ValuePerWeight //定义结构体 { doubl...
  • xf_zhen
  • xf_zhen
  • 2016年04月28日 10:27
  • 2137

结构体数组排序

在对结构体数组排除时,首先确定需要排序数组的关键字,并且在排序过程中不是交换关键字的顺序,而是应该交换这个结构的地址,从而使得结构体中的每项能够对应的改变;其中对应的代码如下: #include...
  • yyme411
  • yyme411
  • 2013年09月30日 10:22
  • 4540

c++ sort()结构体排序

#include #include #include using namespace std; typedef struct example { int elem1; int...
  • lethic
  • lethic
  • 2012年07月24日 17:12
  • 8619

C语言-对一个结构体中的字段进行排序

这是帮别人做的一个题目,好久没有接触过C语言了,有点发怵,不过似乎找回点当时学C语言,做课程设计的感觉。 题目:定义一个数组(学生结构体数组),里面包含学号、姓名、身份证和三科学生成绩,要求写一个函...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

<algorithm.h>中sort对结构体排序的用法

sort好用大家都知道的,废话不多说。 试过直接用数组,是会出现问题的,所以建议和容器一起用。 下面提供一种用法例子   #include #include #include #incl...

终于学会了用sort排序结构体了。

  //I did it!!#include#include#include#define maxSize 1020using namespace std;struct node{  double s...
  • rattles
  • rattles
  • 2010年04月22日 22:37
  • 3509

结构体+sort()函数

结构体+sort()函数 结构体的排序顺序: 首先按照a.x递增的方式排序。若a.x相同,则按照b.y的递增方式排序。...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:sort对结构体进行排序
举报原因:
原因补充:

(最多只允许输入30个字)