c++ STL中sort函数的三种使用方法

2023-11-08

复习一下~
STL,C++中的标准模板库, 使用起来方便并且效率较高;
sort函数有三种用法:
一:对基本类型数组从小到大排序

sort( 数组名+n1,数组名+n2)

将数组中下标从n1到n2的元素进行从小到大排序,不包括n2,通过n1,n2 可以对整个或者部分数组排序;
二:对元素类型为T的基本类型数组从大到小排序

sort( 数组名+n1,数组名+n2,greater<T>()); 

T对应各种元素类型
同样,将数组中下标从n1到n2的元素进行从大到小排序,不包括n2,通过n1,n2 可以对整个或者部分数组排序;
啊抱歉,之前写成了greater(T),一定要注意啊,不然编译过不了的

三:第三种自定义排序规则

sort(数组名+n1,数组名+n2,排序规则结构名);

排序规则结构体定义:

struct 结构名{
     bool operator()(const T &a1, const T &a2){
          return    ;
     } 
};

返回值为true说明a1应该排在a2前面,false则相反,T对应元素类型。
举个例子:
排序规则为按个位数从小到大排序:

struct Rule1{ 
    bool operator()(const int &a1, const int &a2){
    	return (a1%10)<(a2%10);
	} 
};

调用时sort(a,a+sizeof(a)/sizeof(int),Rule1());
sort还可以对结构体进行排序。

#include<iostream>//c++ STL中sort函数调用的三种方法 
#include<cstring>//第二种对元素类型为T的基本类型数组从大到小排序sort( 数组名+n1,数组名+n2,greater<T>()); 
#include<algorithm>//用sort要包含这个头文件 
using namespace std;
void Print(int a,int size){
	for(int i=0;i<size;i++)
	    cout<<a[i]<<",";
	cout<<endl;
}
struct Rule1{//按从大到小排序 
	bool operator()(const int &a1, const int &a2){
		return a1>a2;//返回值为true时,说明a1应该排在a2前面 
	}
};
struct Rule2{//按个位数从小到大排序
    bool operator()(const int &a1, const int &a2){
    	return (a1%10)<(a2%10);
	} 
};
int main(){
	int a[]={12,45,3,98,21,7};
	sort(a,a+sizeof(a)/sizeof(int));//sort的第一种用法,对基本类型数组从小到大排序,sort( 数组名+n1,数组名+n2); 
	Print(a,sizeof(a)/sizeof(int));//将会从小到大输出3,7,12,21,45,98
	sort(a,a+sizeof(a)/sizeof(int),Rule1()); //第三种自定义排序规则sort(数组名+n1,数组名+n2,排序规则结构名);
	Print(a,sizeof(a)/sizeof(int));//将会从大到小输出98,45,21,12,7,3
	sort(a,a+sizeof(a)/sizeof(int),Rule2());
	Print(a,sizeof(a)/sizeof(int));//将会按个位数从小到大输出 21,12,3,45,7,98
	return 0; 
}

竟然把这里当成自己的笔记本了~~
判断闰年:

// 能被400整除 或者 能被4整除而不能被100整除 的年份
if(year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)
   return ture;

再更一道例题吧:

整数按照个位数从小到大排。个位数相同,则大的排前面
点按照离原点从近到远排。距离相同,则按x坐标从小到大排。x坐标也相同,则按y坐标从小到大排

#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;

struct Point{
	int x;
	int y;
};
struct Rule1{
	bool operator()(const int &a1, const int &a2){
		if(a1%10==a2%10)
		   return a1>a2;
		else
		   return a1%10<a2%10;
	}
};
struct Rule2{
	bool operator()(const Point &a, const Point &b){
		if((a.x*a.x+a.y*a.y)==(b.x*b.x+b.y*b.y)){
			if(a.x==b.x)
			   return a.y<b.y;
			else 
			   return a.x<b.x;
		}
		else
		    return (a.x*a.x+a.y*a.y)<(b.x*b.x+b.y*b.y);
	}
};
int main()
{
	int a[8] = {6,5,55,23,3,9,87,10 };
	sort(a,a+8,Rule1());
	for(int i = 0;i < 8; ++i)
		cout << a[i] << "," ; 
	cout << endl;
	Point ps[8] = {{1,0},{0,1},{0,-1},{-1,0},{1,-1},{1,1},{2,0},{-2,0} } ;
	sort(ps,ps+8,Rule2());
	for(int i = 0;i < 8; ++i)
		cout << "(" << ps[i].x << "," << ps[i].y << ")"; 
	return 0;
}

程序输出结果

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c++ STL中sort函数的三种使用方法 的相关文章

  • 将复选框添加到 UniformGrid

    我正在尝试将复选框动态添加到 wpf 中的统一网格中 但看起来网格没有为它们分配足够的空间 所以它们都有点互相重叠 这就是我将它们添加到后面的代码中的方法 foreach string folder in subfolders PathCh
  • 如何检查图像对象与资源中的图像对象是否相同?

    所以我试图创建一个简单的程序 只需在单击图片框中更改图片即可 我目前只使用两张图片 所以我的图片框单击事件函数的代码 看起来像这样 private void pictureBox1 Click object sender EventArgs
  • pthread_cond_timedwait() 和 pthread_cond_broadcast() 解释

    因此 我在堆栈溢出和其他资源上进行了大量搜索 但我无法理解有关上述函数的一些内容 具体来说 1 当pthread cond timedwait 因为定时器值用完而返回时 它如何自动重新获取互斥锁 互斥锁可能被锁定在其他地方 例如 在生产者
  • linux perf:如何解释和查找热点

    我尝试了linux perf https perf wiki kernel org index php Main Page今天很实用 但在解释其结果时遇到了困难 我习惯了 valgrind 的 callgrind 这当然是与基于采样的 pe
  • 当 contains() 工作正常时,xpath 函数ends-with() 工作时出现问题

    我正在尝试获取具有以特定 id 结尾的属性的标签 like span 我想获取 id 以 国家 地区 结尾的跨度我尝试以下xpath span ends with id Country 但我得到以下异常 需要命名空间管理器或 XsltCon
  • C#:如何防止主窗体过早显示

    在我的 main 方法中 我像往常一样启动主窗体 Application EnableVisualStyles Application SetCompatibleTextRenderingDefault false Application
  • C 预处理器库

    我的任务是开发源分析工具C程序 并且我需要在分析本身之前预处理代码 我想知道什么是最好的图书馆 我需要一些重量轻 便于携带的东西 与其推出自己的 为什么不使用cpp这是的一部分gcc suite http gcc gnu org onlin
  • Json.NET - 反序列化接口属性引发错误“类型是接口或抽象类,无法实例化”

    我有一个类 其属性是接口 public class Foo public int Number get set public ISomething Thing get set 尝试反序列化Foo使用 Json NET 的类给我一条错误消息
  • 指针减法混乱

    当我们从另一个指针中减去一个指针时 差值不等于它们相距多少字节 而是等于它们相距多少个整数 如果指向整数 为什么这样 这个想法是你指向内存块 06 07 08 09 10 11 mem 18 24 17 53 7 14 data 如果你有i
  • vector 超出范围后不清除内存

    我遇到了以下问题 我不确定我是否错了或者它是一个非常奇怪的错误 我填充了一个巨大的字符串数组 并希望在某个点将其清除 这是一个最小的例子 include
  • 在数据库中搜索时忽略空文本框

    此代码能够搜索数据并将其加载到DataGridView基于搜索表单文本框中提供的值 如果我将任何文本框留空 则不会有搜索结果 因为 SQL 查询是用 AND 组合的 如何在搜索 从 SQL 查询或 C 代码 时忽略空文本框 private
  • clang 实例化后静态成员初始化

    这样的代码可以用 GCC 编译 但 clang 3 5 失败 include
  • 从库中捕获主线程 SynchronizationContext 或 Dispatcher

    我有一个 C 库 希望能够将工作发送 发布到 主 ui 线程 如果存在 该库可供以下人员使用 一个winforms应用程序 本机应用程序 带 UI 控制台应用程序 没有 UI 在库中 我想在初始化期间捕获一些东西 Synchronizati
  • Discord.net 无法在 Linux 上运行

    我正在尝试让在 Linux VPS 上运行的 Discord net 中编码的不和谐机器人 我通过单声道运行 但我不断收到此错误 Unhandled Exception System Exception Connection lost at
  • 实体框架 4 DB 优先依赖注入?

    我更喜欢创建自己的数据库 设置索引 唯一约束等 使用 edmx 实体框架设计器 从数据库生成域模型是轻而易举的事 现在我有兴趣使用依赖注入来设置一些存储库 我查看了 StackOverflow 上的一些文章和帖子 似乎重点关注代码优先方法
  • C - 直接从键盘缓冲区读取

    这是C语言中的一个问题 如何直接读取键盘缓冲区中的数据 我想直接访问数据并将其存储在变量中 变量应该是什么数据类型 我需要它用于我们研究所目前正在开发的操作系统 它被称为 ICS OS 我不太清楚具体细节 它在 x86 32 位机器上运行
  • Process.Start 阻塞

    我正在调用 Process Start 但它会阻止当前线程 pInfo new ProcessStartInfo C Windows notepad exe Start process mProcess new Process mProce
  • Validation.ErrorTemplate 的 Wpf 动态资源查找

    在我的 App xaml 中 我定义了一个资源Validation ErrorTemplate 这取决于动态BorderBrush资源 我打算定义独特的BorderBrush在我拥有的每个窗口以及窗口内的不同块内
  • 如何使用 std::string 将所有出现的一个字符替换为两个字符?

    有没有一种简单的方法来替换所有出现的 in a std string with 转义 a 中的所有斜杠std string 完成此操作的最简单方法可能是boost字符串算法库 http www boost org doc libs 1 46
  • C 中的异或运算符

    在进行按位操作时 我在确定何时使用 XOR 运算符时遇到一些困难 按位与和或非常简单 当您想要屏蔽位时 请使用按位 AND 常见用例是 IP 寻址和子网掩码 当您想要打开位时 请使用包含或 然而 XOR 总是让我明白 我觉得如果在面试中被问

随机推荐

  • 第十三届蓝桥杯单片机组—PCF8591使用

    蓝桥杯 PCF8591使用 00 了解PCF8591 01 PCF8591手册主要部分解读 控制字节 02 程序部分 ADC部分程序 DAC部分程序 03 总结 00 了解PCF8591 蓝桥杯的PCF8591是ADC DAC驱动芯片 大家
  • python 中定义的函数 如何在main中调用_python中main函数的用法

    什么场景下会有main函数 当该python脚本被作为模块 module 引入 import 时 其中的main 函数将不会被执行 main函数的作用 name main 是Python的main函数入口 并非说 加入这句才能使用pytho
  • js插件汇总

    1 NProgress显示顶部进度条 nprogress js 2 Decimal 浮点数运算的精度 decimal js 3 jquery画小图插件 jquery sparkline js 4 侧边栏导航 sidebar nav js B
  • apache模块开发 request_rec结构体中变量的值

    request rec结构体中用很多成员变量 这里只输出了char和int两种类型的值 source 1 include httpd h 2 include http config h 3 include http protocol h 4
  • STM32-(16):Systick 系统时钟

    上一篇 STM32 15 如何用ID号保护自己的劳动成果 下一篇 STM32 17 SPI与数码管 数码管 Systick的两大作用 1 可以产生精确延时 原先的Delay只是盲等 2 可以提供给操作系统一个单独的心跳 时钟 节拍 通常实现
  • 2021你有想尝试过副业吗?不如来学习3D游戏建模

    从2020 2021 我们会害怕 害怕经历这次疫情 自己会失业 但是同时也想保住一份工作 不知如果去做 那到底要不要先去找一条后路去做呢 起码还能给自己一条 活路 可是往往试着用哪一条活路 反而更多的是一事无成 我主业是一个3D模型模型师
  • 继承。。。

    继承 上节回顾 static 静态的 作用 可以用来修饰成员变量 gt 静态变量 类变量 静态变量它是随着类的加载而加载 它被这个类的所有对象共享 普通成员变量 实例变量 它是随着对象的创建而产生 在不同的对象之间 是相互独立的 可以用来修
  • java中的IO整理

    写在前面 本文章基本覆盖了java IO的全部内容 文章以例子为主 因为讲解内容的java书很多了 我觉的学以致用才是真 代码是写出来的 不是看出来的 最后欢迎大家提出意见和建议 案例1 创建一个新文件 1 2 3 4 5 6
  • linux安装nginx+php

    在centos服务器下 mkdir docker cd docker mkdir nginx mkdir php mkdir www 2 拉取镜像 docker pull nginx docker pull php 7 4 fpm dock
  • CentOS 7 分区方案

    通常系统盘都会选择性能较好SSD 一般在500G左右 这里就以500G硬盘为例 以下为CentOS 自动分区方案 分区应该按照实际服务器用途而定 自动分区方案将 home 空间分配太多了 多数情况下并不适用 必须存在的分区 分区是必须存在的
  • 如何卸载、删除Anaconda?

    Anaconda这么好用 为啥要删呢 当然是我之前装得乱七八糟 导致现在心情不好 我要把它全部删掉 ok 开始 删除思路 首先利用anaconda clean清理包清理配置文件 然后直接用安装目录下的卸载程序卸载即可 一 anaconda
  • 算法分析基础

    问题 如何比较不同算法的性能 分析算法的运行时间 算法分析的原则 归纳基本操作 如 运算 赋值 比较 统一机器性能 假设基本操作代价均为1 统一机器性能后 算法运行时间依赖于问题输入规模与实例 相同输入规模 实例影响运行 最好情况 不常出现
  • spark 参数调优3-Shuffle Behavior

    spark参数调优系列 目录地址 https blog csdn net zyzzxycj article details 81011540 Shuffle Behavior spark reducer maxSizeInFlight 默认
  • JSP中使用element-ui

    首先需要下载element ui 可以直接在github下载即可 script 引入 这样就可以使用了 如 this message 已经上传过了 无需重复上传 注 vue里面直接使用 this即可 jsp里面想使用的可以试试了
  • 浏览器客户端生成唯一标识码

    created this getFinger methods getFinger const canvas document createElement canvas const ctx canvas getContext 2d const
  • 人工智能:深度学习算法及应用——简单理解CNN卷积神经网络并python实现(带源码)

    深度学习算法及应用 一 实验目的 二 实验要求 三 实验的硬件 软件平台 四 实验原理 1 1 深度学习概述 1 2 深度学习的常见结构 1 3 卷积神经网络 CNN 卷积 池化 全连接网络 1 4 卷积神经网络的大致结构 1 5 参数学习
  • 动态规划—分割回文串-ii 解析+代码

    分割回文串 ii 题目链接 分割回文串 ii 思路 分割字符串s 使得子串都是回文串 最后获得最小分割次数 那么我们可以不断把字符串缩短 判断子串是否可以被分割成回文串 并且最小分割次数 这就是子问题分割了 所以我们可以使用动态规划 状态
  • python3 发送邮件 send mail 使用 163 smtp服务器

    监控本地网络速度 通过api 请求速度 发现速度异常 发送报警邮件 usr bin env python3 coding UTF 8 import smtplib time from email mime text import MIMET
  • 深入理解equals和==的区别

    今天在群里面看到这个问题 equals和 的区别是什么 我有点迟钝 不就是如果是String类型的话equals比较的是内容 非字符串类型则比较的是内容吗 我想里面的考点也没有多少吧 然后我就回复了一个 equals本来就是为了比较内容出现
  • c++ STL中sort函数的三种使用方法

    复习一下 STL C 中的标准模板库 使用起来方便并且效率较高 sort函数有三种用法 一 对基本类型数组从小到大排序 sort 数组名 n1 数组名 n2 将数组中下标从n1到n2的元素进行从小到大排序 不包括n2 通过n1 n2 可以对