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\)在英文中是栈的意思.栈是一种 ...
随机推荐
- 使用 Go 语言实现二叉搜索树
原文链接: 使用 Go 语言实现二叉搜索树 二叉树是一种常见并且非常重要的数据结构,在很多项目中都能看到二叉树的身影. 它有很多变种,比如红黑树,常被用作 std::map 和 std::set 的底 ...
- SpringBoot对接OpenAI
SpringBoot对接OpenAI 随着人工智能技术的飞速发展,越来越多的开发者希望将智能功能集成到自己的应用中,以提升用户体验和应用的功能.OpenAI作为一家领先的人工智能公司,提供了许多先进的 ...
- [mysql]状态检查常用SQL
前言 使用MySQL自身命令获取数据库服务状态. 连接数 -- 最大使用连接数 show status like 'Max_used_connections'; -- 系统配置的最大连接数 show ...
- Winform跨线程访问UI
在开发winfrom应用时,经常遇到异常:System.InvalidOperationException:"线程间操作无效: 从不是创建控件"xxxx"的线程访问它.出 ...
- Vue3 vite:is a JavaScript file. Did you mean to enable the 'allowJs' option?
描述 今天在vue3+vite下进行打包时,突然vscode报了一个error. 大概的意识是询问是否启用"allowJS"选项,因为该文件在程序内是指定用于编译的根文件. 提示信 ...
- [kubernetes]二进制部署k8s集群-基于containerd
0. 前言 k8s从1.24版本开始不再直接支持docker,但可以自行调整相关配置,实现1.24版本后的k8s还能调用docker.其实docker自身也是调用containerd,与其k8s通过d ...
- [译]2023年 Web Coponent 现状
本文为翻译 原文地址:2023 State of Web Components: Today's standards and a glimpse into the future. 最近,我写了关于如何 ...
- Android 调试桥 (adb) 使用教程/示例
sidebar: auto Android 调试桥 (adb) Android 调试桥 (adb) 是一种功能多样的命令行工具,可让您与设备进行通信.adb 命令可用于执行各种设备操作,例如安装和调试 ...
- 3 分钟把高质量 AI 知识库 FastGPT 装进企业微信
FastGPT V4 已经上线,直接冲上 GitHub Trending. 如果你还不知道 FastGPT 是什么,可以先去看看作者的介绍 使用 FastGPT 构建高质量 AI 知识库 非常多的企业 ...
- MySQL 表分区使用实践
在使用 MySQL 8.0 表分区时,需要注意以下一些关键事项和最佳实践: 支持的存储引擎: MySQL 8.0 表分区仅支持一些特定的存储引擎,如 InnoDB 和 NDB(NDB 是 MySQL ...