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

5.关联式容器-maphashtable(完)

接着介绍两个重要的容器maphashtable

关联式容器map&hashtable

  • 1. map
  • 2. hashtable
  • 3. 结语

1. map

map映射也叫键值对即<key,value>分为键值和实值,有序且默认按键值排序,底层数据结构是红黑树,是一个重要的容器。
基本方法:

insert();	//插入一个键值对
find();		//查找键是否在map里面
erase();	//去除指定的键值对

map的插入方式有两种,一种是插入pair键值对一种是类似数组的方式进行初始化。
可执行代码:

//
// Created by wsk on 25-10-27.
//
#include <iostream>
#include <string>
#include <map>
using namespace std;
struct myCompare
{bool operator()(const string& lsh, const string& rsh) const{return lsh > rsh;// 自定义排序方法,按键值降序排序}
};int main()
{map<string,int> mymap;map<string,int,myCompare> mymap2;multimap<string,int,myCompare> mymap3;// 多键map// mymap3.insert(pair<string,int>("a",1));// mymap3.insert(pair<string,int>(string("a"),1));// cout << mymap3.size() << endl;// string str = "hello";mymap["Tom"] = 1;mymap["Jack"] = 2;mymap["Bob"] = 3;mymap["Rose"] = 4;mymap2["Tom"] = 1;mymap2["Jack"] = 2;mymap2["Bob"] = 3;mymap2["Rose"] = 4;pair<string,int> value("David",5);mymap.insert(value);// 插入mymap2.insert(value);int number = mymap["Bob"];cout << number << endl;// mymap.erase("Tom");// 删除cout << mymap.size() << endl;auto it2 = mymap.find("Tom");// 查找if (it2 != mymap.end()){mymap2.erase(it2);cout << "Tom is found!" << endl;}else{cout << "Tom is not found!" << endl;}// it2->second = 6;// 修改实值auto it = mymap.begin();while(it != mymap.end()){cout<< it->first <<" "<< it->second <<endl;// 默认按照键值排序++it;}cout<<endl;cout << "降序排序后:" << endl;auto it3 = mymap2.begin();while(it3 != mymap2.end()){cout<< it3->first <<" "<< it3->second <<endl;// 默认按照键值排序++it3;}cout<<endl;return 0;
}

2. hashtable

哈希表又叫散列表,采用空间换时间的思路,是查找时间复杂度接近O(1)的数据结构。其中有两个重要的概念哈希函数碰撞检测。使用哈希函数不可避免的会带来哈希碰撞,常见处理方式有线性探测法拉链法。接下来主要介绍一下拉链法,因为STL模板里面的hashtable冲突处理方式就是拉链法的一个变体。
简单例子:在长度为53的哈希表里面依次插入元素59、63、108、2、53、55。哈希函数采用简单的除余运算。插入后哈希表如图所示:
在这里插入图片描述
当出现哈希值相同时通过链表连接相同哈希值的元素。比如要查找值108是否在哈希表里面首先计算key为2然后顺序查询链表直到链表为空。hashtable在STL容器是以底层算法的形式存在,利用到hashtable的容器有hash_set、hash_map、hash_multiset和hash_multimap。和普通的set、map的区别是hash_set和hash_map的键值是无序的,而set和map是有序的。简单测试:

//
// Created by wsk on 25-10-27.
//
#include <algorithm>
#include <iostream>
#include <unordered_set>
using namespace std;int main()
{unordered_set<int> myset(10);myset.insert(3);myset.insert(13);myset.insert(23);myset.insert(389);myset.insert(194);myset.insert(387);auto iter = myset.begin();while (iter!=myset.end()){cout << *iter << endl;++iter;}return 0;
}

3. 结语

STL标准模板库里面提供了大量常见的数据结构,可以帮助我们理解和使用它们。利用这些数据结构可以快速实现我们的逻辑和提高编程效率。

http://www.dtcms.com/a/542527.html

相关文章:

  • 网站 头尾调用单位加强网站建设
  • 无人机配电分配技术要点难点分析
  • 02.OpenStack架构介绍
  • 织梦中英文版网站怎么做wordpress APP canwp
  • 类变量和类方法main方法代码块单例设计模式final关键字抽象类接口接口多态的特性
  • 网站做成软件免费定制开发软件
  • 左右布局的网站杭州做宠物网站的公司哪家好
  • 广安住房和城乡建设厅网站怎么投诉没有备案就已经运营网站
  • .net网站开发中注册页面网站怎么解析到域名
  • java设计模式八、组合模式
  • 学校门户网站建设费用网页制作与设计考试
  • 青海营销网站建设服务win 2003 网站 管理员
  • 建设企业网站价钱通辽网站公司
  • 零基础从头教学Linux(Day 58)
  • 电子商务网站建设应该侧重哪方面丹东制作网站公司
  • 深圳横岗做网站的深圳家装互联网网站
  • 珠海pc网站建设春秋网络优化技术团队介绍
  • 网站尾部阿里云和wordpress
  • 杭州公司网站建设套餐项目代理
  • 常熟做网站推广的家政保洁服务网站模板
  • a做片手机免费网站做的网站不能放视频软件
  • 网站建设后期服务网站广告代码检测
  • 免费外贸网站建设个人网页制作软件
  • 1第七章python函数进阶
  • 新手做亚马逊要逛哪些网站网站维护页面
  • 如何建设门户网站易居cms
  • 专为WebGIS开发者打造的客户端---GISBox
  • Day 03JS的数组
  • STM32F072 CAN and USB
  • 西安公司西安百度seo排名软件