首页 > 其他分享 >STL大全

STL大全

时间:2022-12-24 16:22:37浏览次数:35  
标签:sort map STL int 数组 pair 排序 大全

排序最速传说——sort

我们都学过一些排序的写法,比如冒泡排序,快速排序之类的东西,举个例子来说吧,这是快速排序的代码:

#include<iostream>
using namespace std;
int a[100001];
void quicksort(int l,int r)
{
  int i=l,j=r;
  int mid=a[(l+r)/2];
  do
  {
    while(a[i]<mid) i++;
    while(a[j]>mid) j--;
    if(i<=j)
    {
      swap(a[i],a[j]);
      i++;j--;
    }
  }while(i<=j);
  if(l<j) quicksort(l,j);
  if(r>i) quicksort(i,r);
}
int main()
{
  int arr=0;
  int n;
  cin>>n;
  for(int i=1;i<=n;++i)
    cin>>a[i];
  quicksort(1,n);
  for(int i=1;i<=n;++i)
    {
      arr++;
      if(arr==1) cout<<a[i];
      else cout<<" "<<a[i];
    }
  return 0;
}

而这个操作,sort只要一行

sort(a+1,a+1+n);

a是要排序的数组的名称,+1的意思是从下标为1的开始,+n+1的含义是从1到n。然后a数组中1-n的元素都被排序好了。
sort默认是从小到大排序,但是如果你想让他从大到小排序的话也可以,只需要这样做

int bool cmp(int a,int b)
{
	return a>b;
}
sort(a+1,a+n+1,cmp);

同理你也可以在cmp中进行其他的修改,让他可以对结构体进行排序。

“超级数组”map

map可以对两个元素形成映射关系,先来看他的定义、

map<int,int>mp;

map后面的尖括号里面的两个分别表示下标和存储数据的类型(如果当一个数组来用的话),也就是说,用这个当数组,甚至可以用字符串当下标,当然只有这一点是不足以让他成为超级数组的,正常情况下,开1e9的数组是肯定会爆的,但是,我们的map他没存储东西的数组是不占空间的,所以能完成下面的操作:

#include<bits/stdc++.h>
#define int long long
using namespace std;
signed main()
{
	map<int,int>mp;
	mp[1000100000]=114514;
	cout<<mp[1000100000]<<endl;
	return 0;
}

运行结果:
image
所以他才被成为超级数组。
但是这个东西有一个很大的缺陷就是在数据很多的时候跑的很慢,所以能用普通数组解决的问题不会用map。
最后提一嘴:unordered_map和map的区别的话,map里面是用hash映射,前者不会排序,所以在效率上要高于普通的map。

精简结构体——pair

pair这个东西我不常用,因为一般pair能干的结构体也可以做,但还是有必要了解一下的。
pair可以存放两个元素,使用的时候直接调用,调用下面再说
先来看一下定义

pair<int,int>p;

看到这个是不是有点眼熟?像极了map,pair的尖括号里面分别表示存放的两个数据的类型
调用的时候也是非常的方便

int p1=p.first;
int p2=p.second;

这样就可以分别调用p存放的两个数据了。
在定义pair的时候,如果觉得一直pair<int,int>太麻烦了,你可以用自带的一个函数,

make_pair(1,1);

我并不觉得很方便,我一般不用。

标签:sort,map,STL,int,数组,pair,排序,大全
From: https://www.cnblogs.com/Multitree/p/17002989.html

相关文章

  • STL大纲
    嗯,因为疫情的原因,博主到现在都没能退役成功,nj让学STL,虽然她也允许学whk,但我总不能恬着脸全学whk吧\(set\).¶\(deque\)显而易见的头文件#include<deque>......
  • 《代码大全2》——读后感4
    本次读后感写于阅读完《代码大全2》第五章第一节和第二节的前一半部分。一、设计中的挑战        二、关键的设计概念         ......
  • JSTL的常用标签choose和foreach
    JSTL的常用标签choosec:choose标签:<%@pagecontentType="text/html;charset=UTF-8"language="java"%><%@taglibprefix="c"uri="http://java.sun.com/jsp/jstl/co......
  • JSTL概述以及JSTL中的if标签
    JSTL概述1.概念:JavaServer Pages TagLibraryJSP标准标签库是由Apache组织提供的开源的免费的jsp标签2.作用:用于简化和替换jsp页面上的java代码3.使用步骤:......
  • 实用干货!Java乱码问题原因及解决方案大全
    最近有粉丝给壹哥发来私信,问我Java里的乱码问题该怎么解决,说是自己被乱码问题给弄的焦头烂额的。其实乱码问题解决起来很简单,很多人搞不定乱码是由于没有找到导致乱码的根本......
  • Win10 CMD命令大全与超好用的快捷键
    1.calc:启动计算器2.appwiz.cpl:程序和功能3.certmgr.msc:证书管理实用程序4.charmap:启动字符映射表5.chkdsk.exe:Chkdsk磁盘检查(管理员身份运......
  • 开发者必须知道的MobTech秒验(一键登录)优势大全
    为了更好地帮助企业提升用户触达效果,MobTech近期重磅推出MobTech秒验(一键登录),帮助运营实现高效转化。相信很多已经使用过MobTech秒验(一键登录)的开发者都知道其好处,但是具体......
  • SpringBoot2.x系列教程之SpringBoot2.x配置大全03
    SpringBoot2.x系列教程之SpringBoot2.x配置大全作者:一一哥一.SpringBoot2.x配置大全(下)#THREADDUMPENDPOINT(ThreadDumpEndpoint)management.endpoint.threaddump.cache.......
  • TestLoader
    该discover方法接收三个参数:start_dir:要测试的模块名或者测试用例的目录。pattern="test*.py":表示用例文件名的匹配原则,默认匹配以​​test​​开头的文件名,星号表示后续的......
  • Linux 中的 lsof 命令使用大全
    Linux计算机中的每个对象都被视为一个文件。这些文件组织在目录中。当您的计算机运行时,它会打开多个文件和目录,供不同的进程使用。您可以使用lsof命令列出这些打开的文件......