map,hash_map, hash_table, 红黑树 的原理和使用

在刷算法题的时候总是碰到好多题,号称可以用hash table来解题。然后就蒙圈了。

1.首先,map和hash_map的区别和使用:

(1)map底层用红黑树实现,hash_map底层用hash_table 实现。所以map的时间复杂度为O(logn), hash_map为O(1)。

(2)map和hash_map都在stl中,直接include,但是在Mac系统中要#include <ext/hash_map>和 using namespace __gnu_cxx;

(3)以map为例来说明使用(hash_map的使用方法和map一样的):

    a. 定义: map<int, string> person;

    b. 插入:person[1000] = "Rambo";  //直接插入,开销很大,先查找key为1000的value再插入Rambo

        person.insert(map<int, string>::value_type(1000, "Rambo"));  //开销较小

    c. 查找:使用find()和count()函数

        find()传入参数key,返回iterator,如果找不到,返回为end()。iterator数据类型为std::pair对象,iterator->first表示key,

        iterator->second表示value。

        

int key = 123;
map<int, string>::iterator it = person.find(key);
if(it == person.end())
//没找到
else
//找到了

    d.删除元素: person.erase(iterator it), person.erase(const Key& key); person.clear();

2.hash table:

3.红黑树:

这两部分内容比较复杂,有空再弄吧。

时间: 2024-11-05 12:11:42

map,hash_map, hash_table, 红黑树 的原理和使用的相关文章

红黑树算法原理(十三)

前言 最近断断续续花了一个礼拜的时间去看红黑树算法,关于此算法还是比较难,因为涉及到诸多场景要考虑,同时接下来我们要讲解的HashMap.TreeMap等原理都涉及到红黑树算法,所以我们不得不了解其原理,关于一些基础知识这里不再讲解,本文参考博文:<https://www.cnblogs.com/aspirant/p/9084199.html>,参考链接太多文字描述,看过很多关于红黑树的文章,有些越讲越懵逼,有些讲的挺好关键是不说人话(这里不是骂人哈,指的是文章讲解的还是有点抽象),在这里希望

【转】B树、B-树、B+树、B*树、红黑树、 二叉排序树、trie树Double Array 字典查找树简介

B  树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right): 2.所有结点存储一个关键字: 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树: 如: B树的搜索,从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中:否则,如果查询关键字比结点关键字小,就进入左儿子:如果比结点关键字大,就进入右儿子:如果左儿子或右儿子的指针为空,则报告找不到相应的关键字: 如果B树的所有非叶子结点的左右子树的结点数目均保持差不多(平衡),那么B树的搜索性

【C/C++学院】0828-STL入门与简介/STL容器概念/容器迭代器仿函数算法STL概念例子/栈队列双端队列优先队列/数据结构堆的概念/红黑树容器

STL入门与简介 #include<iostream> #include <vector>//容器 #include<array>//数组 #include <algorithm>//算法 using namespace std; //实现一个类模板,专门实现打印的功能 template<class T> //类模板实现了方法 class myvectorprint { public: void operator ()(const T &

算法之红黑树

红黑树(一) 原理和算法详细介 1 R-B Tree简介 R-B Tree,全称是Red-Black Tree,又称为"红黑树",它一种特殊的二叉查找树.红黑树的每个节点上都有存储位表示节点的颜色,可以是红(Red)或黑(Black). 红黑树的特性:(1)每个节点或者是黑色,或者是红色.(2)根节点是黑色.(3)每个叶子节点(NIL)是黑色. [注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!](4)如果一个节点是红色的,则它的子节点必须是黑色的.(5)从一个节点到该节点

红黑树(转)

用户空间使用Linux数据结构系列之红黑树 本文通过对Linux内核中红黑树的源码分析,通过大量图示描述红黑树的原理,最后通过移植改造Linux内核红黑树代码,使用户空间也能使用Linux红黑树. 本着从群众中来,回到群众中去的原则,本文很多内容都是参考网上资料,但本身不影响大家阅读,因为我们的目的很明确,就是掌握原理,并在实践中应用. 红黑树由来: 他是在1972年 由Rudolf Bayer发明的,他称之为"对称二叉B树",它现代的名字是Leo J. Guibas和 Robert

图解集合7:红黑树概念、红黑树的插入及旋转操作详细解读

原文地址http://www.cnblogs.com/xrq730/p/6867924.html,转载请注明出处,谢谢! 初识TreeMap 之前的文章讲解了两种Map,分别是HashMap与LinkedHashMap,它们保证了以O(1)的时间复杂度进行增.删.改.查,从存储角度考虑,这两种数据结构是非常优秀的.另外,LinkedHashMap还额外地保证了Map的遍历顺序可以与put顺序一致,解决了HashMap本身无序的问题. 尽管如此,HashMap与LinkedHashMap还是有自己

Java集合详解6:TreeMap和红黑树

Java集合详解6:TreeMap和红黑树 初识TreeMap 之前的文章讲解了两种Map,分别是HashMap与LinkedHashMap,它们保证了以O(1)的时间复杂度进行增.删.改.查,从存储角度考虑,这两种数据结构是非常优秀的.另外,LinkedHashMap还额外地保证了Map的遍历顺序可以与put顺序一致,解决了HashMap本身无序的问题. 尽管如此,HashMap与LinkedHashMap还是有自己的局限性----它们不具备统计性能,或者说它们的统计性能时间复杂度并不是很好才

算法导论-------------红黑树

红黑树是一种二叉查找树,但在每个结点上增加了一个存储位表示结点的颜色,可以是RED或者BLACK.通过对任何一条从根到叶子的路径上各个着色方式的限制,红黑树确保没有一条路径会比其他路径长出两倍,因而是接近平衡的.本章主要介绍了红黑树的性质.左右旋转.插入和删除.重点分析了在红黑树中插入和删除元素的过程,分情况进行详细讨论.一棵高度为h的二叉查找树可以实现任何一种基本的动态集合操作,如SEARCH.PREDECESSOR.SUCCESSOR.MIMMUM.MAXMUM.INSERT.DELETE等

红黑树和哈希表的对比

什么是Hash Hash,也可以称为"散列",就是把任意长度的输入,通过散列算法,变换成固定长度的输出,该输出就是散列值.这是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出(也就是多对一的关系). 哈希表的构造 在所有的线性数据结构中,数组的定位速度最快,因为它可通过数组下标直接定位到相应的数组空间,就不需要一个个查找.而哈希表就是利用数组这个能够快速定位数据的结构解决以上的问题的. "数组可以通过下标直接定位到相应的空间"