当前位置: 首页 > news >正文

unordered_map和unordered_set的使用

前言

        在C++98中,STL提供了底层为红黑树的结构的一系列关联式容器,在查询时效率可以达到logN,即使最差的情况下需要比较红黑树的高度次,当树中的节点较多时,查询的效率也不是很理想,最好的查询是,进行很少的比较次数就能将元素找出来,因此在C++11中,STL又提供了4个unordered系列的关联式容器,这四个容器与红黑树结构中的关联容器的使用方法是类似的,只是底层结构不同,这里只对unordered_map和unordered_set进行介绍。

目录

1.unordered_map

        1.1unordered_map的介绍

        1.2unordered_map的接口介绍

2.unordered_set 


1.unordered_map

        1.1unordered_map的介绍

       unordered_map的在线文档

        1.unordered_map是存储<key,value>的键值对的关联式容器,其允许通过key快速索引到与之关联的value。

        2.在unordered_map中键值对是唯一地标识元素,而映射值是一个对象,其内容与此键关联。键和映射值的类型可能不同。

        3.在内部,unorderd_map没有对应的<key,value>,按照特定的顺序排序,为了能在常数范围内找到key对应的value,unordered_map将相同哈希值的键值对放到相同的桶中。

        4.unordered_map容器通过key访问单个元素的速度要比map快,但是它通常在遍历元素子集的范围内的迭代方面效率要低。

        5.unordered_map实现了直接访问操作符(operator[]),它允许使用key作为参数直接访问value。

        6.它的迭代器是前向迭代器(只支持正向遍历)。         

        1.2unordered_map的接口介绍

              1.unordered_map的构造函数

函数声明函数功能

unordered_map

构造不同类型的

unordered_map对象

        2.unordered_map的容量

函数声明函数功能
bool empty()const检测unordered_map是否为空
size_t size()const获取 unordered_map的有效元素个数

 

        3.unordered_map的迭代器

        

函数声明函数功能
begin()获取unordered_map第一个元素的迭代器
end()获取unordered_map最后一个元素下一个位置的迭代器
cbegin()获取unordered_map第一个元素的const迭代器
cend()获取unordered_map最后一个位置的下一个位置的迭代器

 

        4.unordered_map的元素访问

        

函数声明函数功能
operator[]返回与key对应的value,没有一个默认值

         注意:该函数中实际调用哈系桶的插入操作,用参数key与V()构造一个默认值往底层的哈系桶中插入,如果key不在哈系桶中,插入成功返回V(),插入失败,说明key已经在哈系桶中,将对应的value返回。

        5.unordered_map的查询

函数声明函数功能
iterator find(const K& key)返回对应key在哈系桶中的位置
size_t count(const K& key)返回哈系桶中关键码为key的键值对的个数

         注意:unordered_map中的key是不能重复的,因此count函数的返回值最大是1.

        6.unordered_map的修改操作

函数声明函数定义
Insert向容器中插入key,value的键值对
erase 删除容器中的键值对
void clear()清空容器中的有效元素的个数
void swap(unorder_map&)交换两个容器中的元素

 

        7.unordered_map的桶操作  

函数声明函数功能
size_t bucket_count()const返回哈系桶的总个数
size_t bucket_size(size_t n)const

返回n号桶中有效元素的总个数

size_t bucket(const K& key)返回元素所在的桶号

 

2.unordered_set 

         unordered_set和set的使用别无二致,这里推荐参考set的使用,set的使用。

        unordered_set的在线文档

#include<iostream>
#include<unordered_map>
#include<unordered_set>
#include<unordered_set>
using namespace std;
void TestUnordered_map()
{unordered_map<string, string> ump;//增ump.insert(make_pair<string, string>("big", "大"));ump.insert(make_pair<string, string>("long", "长"));ump.insert(make_pair<string, string>("short", "短"));ump.insert(make_pair<string, string>("known", "知道"));ump.insert(make_pair<string, string>("eye", "眼睛"));ump["haha"] = "哈哈";ump["string"];ump["left"] = "左";for (auto& e : ump)cout << e.first << ": " << e.second << endl;std::unordered_map<string, string> ::iterator it = ump.begin();while (it != ump.end()){cout << it->first << ":" << it->second << endl;++it;}std::unordered_map<string,string>::iterator it1 = ump.find("left");//查it1->second = "非左";//改cout << it1->first << ":" << it1->second << endl;ump.erase("string");//删while (it != ump.end()){cout << it->first << ":" << it->second << endl;++it;}
}
void TestUnordered_set()
{//插入std::unordered_set<int> ust;ust.insert(1);ust.insert(3);ust.insert(5);ust.insert(2);ust.insert(4);ust.insert(6);std::unordered_set<int>::iterator it = ust.begin();while (it != ust.end()){cout << *it << " ";++it;}ust.erase(1);ust.erase(2);std::unordered_set<int>::iterator it1 = ust.find(3);cout << endl;cout << *it1 << endl;it = ust.begin();while (it != ust.end()){cout << *it << " ";++it;}
}

 

http://www.lryc.cn/news/163979.html

相关文章:

  • javascript【格式化时间日期】
  • CCC数字钥匙设计【NFC】--什么是AID?
  • 变压器耐压试验电压及电源容量的计算
  • uniapp实现底部弹出菜单选择
  • 14. 线性代数 - 线性方程组
  • C++QT day4
  • Python中的 if __name__ ==‘main‘
  • github 创建自己的分支 并下载代码
  • 算法:贪心---跳一跳
  • 机器学习入门教学——梯度下降、梯度上升
  • BUUCTF Reverse/[羊城杯 2020]login(python程序)
  • indexDB localForage
  • Spring Boot开发时Java对象和Json对象互转
  • C++ 多态
  • LeetCode 之 二分查找
  • 【性能测试】中间件优化
  • 【算法】查找类——二分查找算法
  • Ansible FIle模块,使用Ansible File模块进行文件管理
  • 索尼mp4变成rsv修复案例(ILME-FX3)
  • 抓拍摄像机开关量控制4K高清手机远程看图建筑生长定时缩时相机
  • c++使用http请求-drogon框架
  • 幼儿棒球运动宣传介绍·野球6号位
  • grpc多语言通信之GO和DART
  • 基于FPGA的RGB图像转Ycbcr实现,包括tb测试文件以及MATLAB辅助验证
  • centos 编译安装的php多版本 切换
  • Unity 性能优化之Shader分析处理函数ShaderUtil.HasProceduralInstancing: 深入解析与实用案例
  • 2023数学建模国赛E题黄河水沙监测数据分析完整代码分析+处理结果+思路文档
  • 玩转Mysql系列 - 第19篇:游标详解
  • 【量化分析】Python 布林线( Bollinger)概念
  • MySQL的权限管理与远程访问