STL unordered类容器浅谈
一个代码:
#include<cstdio>
#include<vector>
#include<functional>
#include<algorithm>
#include<set>
#include<unordered_set>
#include<map>
#include<unordered_map>
using namespace std;
char s[6][10] = { "Able","was","I","I","saw","elbA" };
int a[7] = { -2,3,1,4,4,7 };
int main()
{
set<int,greater<int> > GREATER_SET;//自动排序去重按从大到小排,必须加上functional头文件
set<int> SET;//自动排序从小到大
multiset<int> MULTI_SET;//自动排序不去重不加比较类(greater<int>)默认是从小到大排序
unordered_set<int> UNORDERED_SET;//不自动排序但去重
unordered_multiset<int> UNORDERED_MULTISET;//无序不去重集合
//map的相关系列进行类比即可
map<string,int> MAP;
multimap<string, int> MULTI_MAP;
unordered_map<string, int> UNORDERED_MAP;//通过哈希确定位置,不一定与原始序列相同,主要就是快
unordered_multimap<string, int> UNORDERED_MULTIMAP;
//*******************************************************************
//*******************************************************************
//先看set系列的输出
printf("original:\n");
for (int i = 0; i < 7; i++)
{
printf("%d ", a[i]);
GREATER_SET.insert(a[i]);
SET.insert(a[i]);
MULTI_SET.insert(a[i]);
UNORDERED_SET.insert(a[i]);
UNORDERED_MULTISET.insert(a[i]);
}
printf("\n");
printf("GREATER_SET:\n");
for (set<int, greater<int> >::iterator it = GREATER_SET.begin();
it != GREATER_SET.end(); it++)
{
printf("%d ", *it);
}
printf("\n");
printf("SET:\n");
for (set<int>::iterator it = SET.begin();
it != SET.end(); it++)
{
printf("%d ", *it);
}
printf("\n");
printf("MULTI_SET:\n");
for (multiset<int>::iterator it = MULTI_SET.begin();
it != MULTI_SET.end(); it++)
{
printf("%d ", *it);
}
printf("\n");
printf("UNORDERED_SET:\n");
for (unordered_set<int>::iterator it = UNORDERED_SET.begin();
it != UNORDERED_SET.end(); it++)
{
printf("%d ", *it);
}
printf("\n");
printf("UNORDERED_MULTISET:\n");
for (unordered_multiset<int>::iterator it = UNORDERED_MULTISET.begin();
it != UNORDERED_MULTISET.end(); it++)
{
printf("%d ", *it);
}
printf("\n");
//再看map系列的输出
pair<string, int> psi;
printf("original:\n");
for (int i = 0; i < 6; i++)
{
printf("%s->%d ", s[i], i);
MAP[s[i]] = i;
psi.first = s[i];//char数组自动封装成string
psi.second = i;
MULTI_MAP.insert(psi);
UNORDERED_MAP[s[i]] = i;
UNORDERED_MULTIMAP.insert(psi);
}
printf("\n");
printf("MAP:\n");
for (map<string, int>::iterator it = MAP.begin();
it != MAP.end();it++)
{
printf("%s->%d ", it->first.c_str(), it->second);
}
printf("\n");
printf("MULTI_MAP:\n");
for (multimap<string, int>::iterator it = MULTI_MAP.begin();
it != MULTI_MAP.end(); it++)
{
printf("%s->%d ", it->first.c_str(), it->second);
}
printf("\n");
printf("UNORDERED_MAP:\n");
for (unordered_map<string, int>::iterator it = UNORDERED_MAP.begin();
it != UNORDERED_MAP.end(); it++)
{
printf("%s->%d ", it->first.c_str(), it->second);
}
printf("\n");
printf("UNORDERED_MULTIMAP:\n");
for (unordered_multimap<string, int>::iterator it = UNORDERED_MULTIMAP.begin();
it != UNORDERED_MULTIMAP.end(); it++)
{
printf("%s->%d ", it->first.c_str(), it->second);
}
printf("\n");
return 0;
}
STL unordered类容器浅谈的更多相关文章
- C++ STL中的常用容器浅谈
STL是C/C++开发中一个非常重要的模板,而其中定义的各种容器也是非常方便我们大家使用.下面,我们就浅谈某些常用的容器.这里我们不涉及容器的基本操作之类,只是要讨论一下各个容器其各自的特点.STL中 ...
- PHP自动加载类__autoload()浅谈
在面向对象编程中,都是以对象为单位的操作,如果我有两个不同的类,类A和类B,在同一个文件里,实例化对象,就能在这个文件同时调用类A和类B的函数 <?php #a.php class A{ pub ...
- Java学习笔记(8)---Scanner类,浅谈继承
1.Scanner类: a.定义: java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入. Scanner s = new Scanner(S ...
- php中普通类 接口类 抽象类 浅谈
一.普通类 1.关键词:class 类名,继承关键字extends 2.继承:只能实现单继承, 3.多态:子类继承可以实现多种功能 4.封装:类有权限机制,私有的只能自己用,受保护的可以被继承,子类 ...
- JAVA容器-浅谈HashMap的实现原理
概述 HashMap是通过数组+链表的方式实现的,由于HashMap的链表也是采用数组方式,我就修改直接利用LinkedList实现,简单模拟一下. 1.Key.Value的存取方式. 2.HashM ...
- 浅谈C++ STL string容器
浅谈C++ STL string容器 本篇随笔简单讲解一下\(C++STL\)中\(string\)容器的使用方法及技巧. string容器的概念 其实\(string\)并不是\(STL\)的一种容 ...
- 浅谈C++ STL list 容器
浅谈C++ STL list 容器 本篇随笔简单讲解一下\(C++STL\)中\(list\)容器的使用方法和使用技巧. list容器的概念 学习过\(C++STL\)的很多同学都知道,\(STL\) ...
- 浅谈C++ STL vector 容器
浅谈C++ STL vector 容器 本篇随笔简单介绍一下\(C++STL\)中\(vector\)容器的使用方法和常见的使用技巧.\(vector\)容器是\(C++STL\)的一种比较基本的容器 ...
- 浅谈C++ STL queue 容器
浅谈C++ STL queue 容器 本篇随笔简单介绍一下\(C++STL\)中\(queue\)容器的使用方法和常见的使用技巧.\(queue\)容器是\(C++STL\)的一种比较基本的容器.我们 ...
- 浅谈C++ STL stack 容器
浅谈C++ STL stack 容器 本篇随笔简单介绍一下\(C++STL\)中\(stack\)容器的使用方法和常见的使用技巧. stack容器的概念 \(stack\)在英文中是栈的意思.栈是一种 ...
随机推荐
- 好用工具:Save All Resources
说明 该插件可以下载网页中的所有资源 使用方法
- 2023-07-31:用r、e、d三种字符,拼出一个回文子串数量等于x的字符串。 1 <= x <= 10^5。 来自百度。
2023-07-31:用r.e.d三种字符,拼出一个回文子串数量等于x的字符串. 1 <= x <= 10^5. 来自百度. 答案2023-07-31: 大体步骤如下: 1.初始化一个字符 ...
- 实现地图遮罩 leaflet
1 前言 在地图中加载的底图是瓦片服务(固定大小的规则矩形),底图的范围很大,铺满了整个div,但是我们的感兴趣的部门可能只是其中一部分,如何在整个屏幕中突出感兴趣的部分-- 地图遮罩(遮挡图像中不感 ...
- Apache solr XML 实体注入漏洞(CVE-2017-12629)
描述: Apache Solr 是一个开源的搜索服务器.Solr 使用 Java 语言开发,主要基于 HTTP 和 Apache Lucene 实现.原理大致是文档通过Http利用XML加到一个搜索集 ...
- .NET 8 发布的最后一个预览版Preview 7, 下个月发布RC
微软在2023年8月9日 发布了.NET 8 Preview 7[1],这是它在11月14日 RTM 之前进入发布候选阶段之前的最后预览版. 该预览版也于也与 VS 2022 v17.7 版本一起发布 ...
- 开机自动打开termux以及启动termux的服务
ps:因为我们的服务是安装在平板上面的termux,客户不想维护麻烦,如果平板重启之后还需要手动启动ternux,还要开启命令启动服务,这样比较麻烦,所以研究如下操作 1.安装macroDroid 直 ...
- 2023-09-03:用go编写。给你一个 n 个节点的无向无根树,节点编号从 0 到 n - 1 给你整数 n 和一个长度为 n - 1 的二维整数数组 edges , 其中 edges[i] =
2023-09-03:用go语言编写.给你一个 n 个节点的无向无根树,节点编号从 0 到 n - 1 给你整数 n 和一个长度为 n - 1 的二维整数数组 edges , 其中 edges[i] ...
- pygame 入门实例教程 1 - 复古方块赛车游戏
作者自我介绍:大爽歌, b站小UP主 ,直播编程+红警三 ,python1对1辅导老师 . 本教程步骤明确,过程清晰简明,最终代码量250行上下,适合学习pygame的新手. 项目代码已上传到我的gi ...
- DHorse v1.4.0 发布,基于 k8s 的发布平台
版本说明 新增特性 提供Fabric8客户端操作k8s(预览)的功能,可以通过指定-Dkubernetes-client=fabric8参数开启: Vue.React应用增加Pnpm.Yarn的构建方 ...
- Solution -「CF 1096E」The Top Scorer
Description Link. 小明在打比赛,包括小明自己一共有 \(p\) 名选手参赛,每个人的得分是一个非负整数.最后的冠军是得分最高的人,如果得分最高的人有多个,就等概率从这些人中选一个当冠 ...