简谈俩种不同方式对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的排序

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

自定义结构体vector排序

// 列表行内容 typedef struct _LIST_ROW {     int iSeq;                // 序号 ...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

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

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

对结构体vector进行sort(C++)

自己写一个小程序时,自己定了一个结构体word,并使用了C++标准库中的vector来作为结构体word的容器。我在程序需要对所有的word进行排序。于是,问题来了:如何对结构体vector,使用标准...

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

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

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

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

java自定义容器排序的两种方法

首先说一下排序的返回值的含义。对于参与比较的两个Object,o1和o2,如果函数的返回值为正值,把o1排在o2后面;返回值为负值,把o1排在o2前面。如果返回值是0,按照容器之前的顺序排列。在com...

struct 结构体定义方式汇总

结构体变量定义方法多样,统计一下 直接定义"结构体变量"——如果结构体只在局部使用(函数或.c文件),则可直接定义变量 struct person{ char name[8]; int age; ...

C++对存放对象的Vector容器按自定义字段排序

运行结果文件列表 student.h//声明类-属性和方法 student.cpp//实现类方法 main.cpp//排序算法 测试 说明此处定义结构体或者类都一样,都可以借助算法库,自己定义排序规则...

poj----Anagram Groups

World-renowned Prof. A. N. Agram's current research deals with large anagram groups. He has just fou...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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