简谈俩种不同方式对vector容器的 自定义结构体进行排序

原创 2016年05月31日 21:16:19

俩种方法,自己容易忘所以记下来了

一:重载< 比较运算符,最后可以直接用sort()排序

     比如:

bool operator < (const Time r)const { return  hh * 3600 + mm * 60 + ss < r.hh * 3600 + r.mm * 60 + r.ss; }


二:自定义比较函数cmp,最后可以sort(a.begin(),a.end(),cmp)来实现    

    比如:

bool cmp(const Time &a,const Time &b)
{
	return a.hh * 3600 + a.mm * 60 + a.ss > b.hh * 3600 + b.mm * 60 + b.ss;
}
示例程序:

#include<iostream>
#include<string>
#include<vector>
#include<cmath>
#include<algorithm>
struct Time
{
	int hh, mm, ss;
	Time(){}
	Time(int _hh, int _mm, int _ss) :hh(_hh), mm(_mm), ss(_ss){}
	//重载< 这个运算符
	bool operator < (const Time r)const { return  hh * 3600 + mm * 60 + ss < r.hh * 3600 + r.mm * 60 + r.ss; }

};
//定义一个比较大小的函数
bool cmp(const Time &a,const Time &b)
{
	return a.hh * 3600 + a.mm * 60 + a.ss > b.hh * 3600 + b.mm * 60 + b.ss;
}
using namespace std;
int m, n;
int main()
{
	//cin >> m >> n;
	vector<Time> a;
	a.push_back(Time(05, 06, 07));
	a.push_back(Time(15, 04, 07));
	a.push_back(Time(05, 06, 04));
	a.push_back(Time(14, 06, 07));
	a.push_back(Time(06, 07, 18));
	//用cmp函数 从大到小排
	sort(a.begin(), a.end(),cmp);
	for (int i = 0; i < a.size(); i++)
	{
		cout << "hh: "<<a[i].hh<<" mm: "<<a[i].mm<<" ss: "<<a[i].ss<< endl;
	}
	cout << endl;
	//通过重载< 符号,从小到大排
	sort(a.begin(), a.end());
	for (int i = 0; i < a.size(); i++)
	{
		cout << "hh: " << a[i].hh << " mm: " << a[i].mm << " ss: " << a[i].ss << endl;
	}
	return 0;
}

结果图如下:



版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

vector元素为自定义结构体类型时如何对容器元素进行排序?

方法一:在结构体中重载运算符,调用STL的sort()函数 #include "stdafx.h" #include #include #include using names...

自定义结构体vector的排序

C++中当 vector 中的数据类型为基本类型时我们调用std::sort函数很容易实现 vector中数据成员的升序和降序排序,然而当vector中的数据类型为自定义结构体类型时,我们该怎样实现升...

从最简单的vector中sort用法到自定义比较函数comp后对结构体排序的sort算法

sort函数在使用中非常好用,也非常简单,而且效率与冒泡或者选择排序不是一个数量级。本文就sort函数在vector中的用法分为sort函数入门用法与自定义comp比较函数比较结构体这两个最基本的功能...

使用STL去除std::vector自定义结构体重复项

最近搞了一个小东西要去除一个vector中重复的项。是这样的:我用组播搜索设备,得到设备IP信息、版本号信息,等,但有时会接收到多个相同IP设备的信息,因此要过滤掉重复的IP。我使用vector存储每...
  • subfate
  • subfate
  • 2016年06月09日 22:31
  • 1523

struct和typedef struct定义结构体方式的不同(彻底弄清楚!!!)

struct定义结构体和typedef struct定义结构体时,结构体类型名和变量名总是混淆不清,下面将几种不同种的定义方式罗列出来,彻底理清楚它们之间的关系!...

C与C++中定义结构体的不同方式

第三篇:struct和typedef struct 分三块来讲述: 1 首先: 在C中定义一个结构体类型要用typedef: typedef struct Student { int ...

C/C++动态自定义结构体数组实例锻炼-学生成绩排序

/************************************************************************/ /* 本程序是对动态内存、动态数组、结构体、函数的...

stl容器之--自定义结构体作为stl容器元素成员的使用

C++的类型设计要求之一是:在对待自定义类型时和内置类型必须是一致的,甚至自定义类型的支持更好。 《C++标准程序库》: set和multiset会根据特定的排序准则,自动将元素排序。两者不同在于mu...

Vector容器中存放结构体类型的变量

如果要在Vector容器中存放结构体类型的变量,经常见到两种存放方式. 方式一:放入这个结构体类型变量的副本。 方式二:放入指向这个结构体类型变量的指针。 假设结构体类型变量是这样的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:简谈俩种不同方式对vector容器的 自定义结构体进行排序
举报原因:
原因补充:

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