C++中,结构体vector使用sort排序[通俗易懂]

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

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

Jetbrains全系列IDE稳定放心使用

一、遇到问题:

今天写代码的是遇到想对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/179945.html原文链接:https://javaforall.net

(0)
上一篇 2022年10月20日 下午12:00
下一篇 2022年10月20日 下午12:16


相关推荐

  • scss与sass介绍

    scss与sass介绍CSS 层叠样式表 英文全称 CascadingSty 是一种用来表现 HTML 标准通用标记语言的一个应用 或 XML 标准通用标记语言的一个子集 等文件样式的计算机语言 css 预处理器 css 预处理器是用一种专门的语言 进行网页的样式设计 之后在被编译为正常的 css 文件 以供项目使用 使用 css 预处理语言的好处 是 css 更加简洁 方便修改 可读性强 适应新强并且更易于代

    2026年3月18日
    1
  • fpga的spi的编程_UASP协议

    fpga的spi的编程_UASP协议什么是SPI协议?如何用FPGA实现?

    2022年10月16日
    6
  • DataGrip 2021.11.4激活码【2021免费激活】[通俗易懂]

    (DataGrip 2021.11.4激活码)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月30日
    75
  • Linux抓包工具[通俗易懂]

    Linux抓包工具[通俗易懂]字符界面的的抓包工具—-tcpdump可用选项-A以ASCII格式打印出所有分组,并将链路层的头最小化。-c在收到指定的数量的分组后,tcpdump就会停止。-C在将一个原始分组写入文件之前,检查文件当前的大小是否超过了参数file_size中指定的大小。如果超过了指定大小,则关闭当前文件,然后在打开一个新的文件。参数file_size的单位是兆字节(是1,000,000字节,而不是1,048,576字节)。-d将匹配信息包的代码以人们能够理解的汇编格式给出。-dd将

    2022年10月14日
    9
  • nginx和apache、lvs区别

    nginx和apache、lvs区别对比项apachenginx简介配置简洁。负载均衡服务器,支持7层负载均衡内存及资源占用多轻量级,同样的web服务占用少稳定性超稳定不稳定,bug多进程同步进程模型异步进程模型(抗并发)处理静态文件性能好(3倍以上)性能差对PHP支持简单需要配合其他后端用rewrite功能性能好(rewrite频繁时用apache)性能差结合机制后端apache集群前端nginx抗并发Nginx轻量级,采…

    2022年6月14日
    30
  • Typescript教程_typescript在线运行

    Typescript教程_typescript在线运行前言由于最近在使用vue3写项目,使用vue3的前提就是要学习TypeScript,TypeScript算是JavaScript的升级版,TypeScript包含JavaScript和自己的一些特性

    2022年8月7日
    8

发表回复

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

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