sort函数对vector排序_sort函数对结构体数组排序

sort函数对vector排序_sort函数对结构体数组排序一、遇到问题:今天写代码的是遇到想对vector进行排序的问题,隐约记得std::sort函数是可以对vector进行排序的,但是这次需要排序的vector中压的是自己定义的结构体(元素大于等于2),想以其中某一个元素进行正序或逆序排序,则不能直接使用sort函数。二、解决方案:在网上找资料的过程中,看到http://blog.csdn.net/aguisy/article/d

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

一、遇到问题:

今天写代码的是遇到想对vector进行排序的问题,隐约记得std::sort函数是可以对vector进行排序的,但是这次需要排序的vector中压的是自己定义的结构体(元素大于等于2),想以其中某一个元素进行正序或逆序排序,则不能直接使用sort函数。

二、解决方案:

1.C++中当 vector 中的数据类型为基本类型时,我们调用std::sort函数很容易实现 vector中数据成员的升序和降序排序,代码如下(摘自http://www.cplusplus.com/reference/algorithm/sort/):

// sort algorithm example
#include <iostream>     // std::cout
#include <algorithm>    // std::sort
#include <vector>       // std::vector

bool myfunction (int i,int j) { return (i<j); }

struct myclass {
  bool operator() (int i,int j) { return (i<j);}
} myobject;

int main () {
  int myints[] = {32,71,12,45,26,80,53,33};
  std::vector<int> myvector (myints, myints+8);               // 32 71 12 45 26 80 53 33

  // using default comparison (operator <):
  std::sort (myvector.begin(), myvector.begin()+4);           //(12 32 45 71)26 80 53 33

  // using function as comp
  std::sort (myvector.begin()+4, myvector.end(), myfunction); // 12 32 45 71(26 33 53 80)

  // using object as comp
  std::sort (myvector.begin(), myvector.end(), myobject);     //(12 26 32 33 45 53 71 80)

  // print out content:
  std::cout << "myvector contains:";
  for (std::vector<int>::iterator it=myvector.begin(); it!=myvector.end(); ++it)
    std::cout << ' ' << *it;
  std::cout << '\n';

  return 0;
}

输出为:

myvector contains: 12 26 32 33 45 53 71 80


2.然而当vector中的数据类型为自定义结构体类型时,我们该怎样实现排序?
其实就是对上面代码中std::sort函数的第三个参数comp调用的函数或object进行修改即可。在这里我们使用函数作为comp作为例子,代码如下:

#include <vector>
#include <iostream>
#include <algorithm>

using namespace std;

struct Point2
{
	int x;
	int y;
};
bool GreaterSort (Point2 a,Point2 b) { return (a.x>b.x); }
bool LessSort (Point2 a,Point2 b) { return (a.x<b.x); }
int main()
{
	vector<Point2> aaa;
	Point2 temp;
	temp.x=1;
	temp.y=1;
	aaa.push_back(temp);
	temp.x=2;
	temp.y=2;
	aaa.push_back(temp);	
	temp.x=3;
	temp.y=3;
	aaa.push_back(temp);
	sort(aaa.begin(),aaa.end(),GreaterSort);//降序排列
	cout<<"Greater Sort:"<<endl;
	for (int i =0;i<aaa.size();i++)
	{
		cout<<aaa[i].x<<"	"<<aaa[i].y<<endl;
	}

	sort(aaa.begin(),aaa.end(),LessSort);//升序排列
	cout<<"Less Sort:"<<endl;
	for (int i =0;i<aaa.size();i++)
	{
		cout<<aaa[i].x<<"	"<<aaa[i].y<<endl;
	}

	return 1;
}
运行结果如下:
Greater Sort:
3       3
2       2
1       1
Less Sort:
1       1
2       2
3       3

以上代码在visual stdio 2012环境下编译通过,也是自己在实践过程中的总结,如有不妥的地方,欢迎您指出。

三、参考文献:

(转载请注明作者和出处:http://blog.csdn.net/zhouxun 未经允许请勿用于商业用途)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/169876.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • IDEA安装插件的两种方式

    IDEA安装插件的两种方式1.IDEA中在线安装,如图所示2.有的插件下载需要VPN,导致下载很慢,我们可以通过官网下载安装包,通过本地安装包进行安装

    2022年6月1日
    84
  • SAPI5_SAP-ERP

    SAPI5_SAP-ERP转载自:http://blog.csdn.net/stone0823/article/details/70339694SAPWebIDE是基于Eclipse内核的在线开发IDE,可以使用在线的试用版本,但服务器在德国,访问的网速特别慢。也可以使用PersonalEdition,在本机启动和编写代码。与Eclipse相比,SAPWebIDE有几个

    2022年10月17日
    1
  • Ubuntu中,VLC中文字幕乱码「建议收藏」

    Ubuntu中,VLC中文字幕乱码「建议收藏」简介VLC播放器是一个非常好用的开源、跨平台的视频播放器。最近下载了不少高清的电影,但是没有内嵌字幕,在射手网上下载的字幕老是乱码,着实麻烦了不少事。解决1、打开工具-首选项2、在视频-字幕/OSD-文本渲染器里,选择一个支持中文的字体。3、在输入/编解码器-字幕编解码器-字幕里,将自动检测UTF8和格式化字幕两项去掉,由于在网上下载的字幕普遍都GBK编码,所以

    2022年7月11日
    41
  • 设置 node 环境变量

    设置 node 环境变量一、前言下载完node后,想要在编辑器里面使用npm命令,必须设置环境变量。二、设置步骤如下(以win10操作系统为例)1.找到“此电脑”,点击右键,选择“属性”;2.按照下图1、2、3的顺序点击;3.出现如下图,选择“path”;4.出现如下图,选择“新建”;5.出现如下图,选择“浏览”,选择node的安装地址;6.确…

    2022年6月8日
    39
  • 数据库读写分离目的是做什么[通俗易懂]

    数据库设置主从库,主库用来写数据,多个从库来查询数据。消除读写的冲突,提高性能主从的一致性问题需要考虑主从一致,用的是binlog来同步,就是回慢4.主从同步就是两个思路A、半同步复制,等从库复制成功才返回写成功B、设一个key记录着一次写的数据,然后设置一个同步时间,如果在这个时间内,有一个读请求,看看对应的key有没有相关数据,有的话,说明数据近期发生过写事件,这样key的…

    2022年4月12日
    73
  • linux redis命令客户端,Redis客户端

    linux redis命令客户端,Redis客户端Redis客户端Redis客户端是一个程序,通过网络连接到Redis服务器,在客户端软件中使用Redis可以识别的命令,向Redis服务器发送命令,告诉Redis想要做什么。Redis把处理结果显示在客户端界面上。通过Redis客户端和Redis服务器交互。Redis客户端发送命令,同时显示Redis服务器的处理结果在Redis命令行客户端redis-cli…

    2022年5月1日
    67

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号