STL_关联容器 VS C++ hashmap】的更多相关文章

红黑树和哈希表区别: http://m.blog.csdn.net/article/details?id=52133283 关于STL中关联容器的几个问题: (1)为何map和set的插入删除效率比用其他序列容器高? 大部分人说,很简单,因为对于关联容器来说,不需要做内存拷贝和内存移动.说对了,确实如此.set容器内所有元素都是以节点的方式来存储,其节点结构和链表差不多,指向父节点和子节点.结构图可能如下: A   / \ B C / \ / \  D E F G 因此插入的时候只需要稍做变换,…
第五章.关联容器  5.0.关联容器 标准的STL关联式容器分为set(集合)和map(映射表)两大类,以及这两大类的衍生体multiset(多键集合)和multimap(多键映射表).这些容器的底层机制均以RB-tree(红黑树)完成.RB-tree也是一个独立容器,但并不开放给外界使用. SGISTL还提供了一个不在标准规格之列的关联式容器:hash_table (散列表),以及以此hash_table为底层机制而完成的hash_set(散列集合).hash_map(散列映射表).hash_…
关联容器包含map.set.multimap.multiset. 关联容器的特点是明显的,相对于顺序容器,有如下特点: 1.其内部是采用非线性的二叉树结构,具体的说是红黑树的结构原理实现的. 2.set和map保证了元素的唯一性,multiset和multimap扩展了这一属性,可以允许元素不唯一. 3.元素可以是有序的集合,默认在插入的时候按升序排列. 关联容器的基本用法相同: begin() 返回所指向的第一个元素的迭代器 clear() 清除所有元素 count() 返回某个值元素的个数…
—顺序容器:vector,list,queue1.顺序容器的常见用法: #include <vector> #include <list> #include <queue> (1)vector声明 vector<string> svec;(2)添加元素: c.push_back(t): 在容器 c 的尾部添加值为 t 的元素.返回 void 类型  c.push_front(t):在容器 c 的前端添加值为 t 的元素.返回 void 类型 只适用于 lis…
<C++ Primer 4th>读书笔记 关联容器和顺序容器的本质差别在于:关联容器通过键(key)存储和读取元素,而顺序容器则通过元素在容器中的位置顺序存储和访问元素. 关联容器(Associative containers)支持通过键来高效地查找和读取元素.两个基本的关联容器类型是 map set.map 的元素以键-值(key-value)对的形式组织:键用作元素在 map 中的索引,而值则表示所存储和读取的数据.set仅包含一个键,并有效地支持关于某个键是否存在的查询. 关联容器类型…
关联容器的操作 除了和顺序容器定义的类型之外,关联容器还定义了一下几种类型: 关联容器额外的类型别名  key_type    此容器类型的关键字类型 mapped_type  每个关键字关联的类型,只 适用于map value_type 对于set,与key_type相同 对于map,为pair<const key_type, mapped_type> 关联容器的迭代器 当解引用一个关联容器迭代器时,会获得一个类型为value_type的值的引用.对于map而言,value_type是一个p…
标准库定义了两种主要的关联容器:map和set map中的元素时一些关键字-值(key-value)对,关键字起到索引的作用,值则表示与索引相关的数据.set中每个元素只包含一个关键字,可以完成高效的关键字查询操作. 由map和set延伸出来一共8个关联容器,或者是一个map,或者是一个set,multi开头的是可以重复关键字的关联容器,unordered_开头的是无序关联容器.unordered_multi开头的是允许重复关键字的无序关联容器. map和multimap定义在头文件<map>…
在“使用 <map> 库创建关联容器”一文中,我们讨论了标准库中的 map 关联容器.但那只是 map 容器的一部分.标准库还定义了一个 multimap 容器,它与 map 类似,所不同的是它允许重复键.这个属性使得 multimap 比预想的要更有用:比如在电话簿中相同的人可以有两个以上电话号码,文件系统中可以将多个符号链接映射到相同的物理文件,或DNS服务器可以将几个URLs映射到相同的IP地址.在这些场合,你可以象下面这样: 1.// 注: 伪码 2.multimap <stri…
当用decltype来获得一个函数指针类型时,必须加上一个*来指出我们要使用一个给定函数类型的指针.decltype<CompareIsbn>*. map<string, int>::value_type v3; //v3 是一个pair<const string, int> 由于下标操作可能插入一个新元素,我们只可以对非const的map使用下标操作. 新标准定义了4个无序关联容器,在关键字没有明显的序关系的情况下,无序容器非常有用.在某些应用中,维护元素的序代价非常…
标准库定义了四种关联容器:map是其中之一(另外还有set.multimap.multiset).map的元素以键-值(key-value),在学了顺序容器之后,再学习关联容器,就比较比较好理解了. map类型,可以说是键-值对的集合,每一个键都与一个或多个值相关联. 利用它可以构造多钟函数: map<string , int >   a; map<char ,int>   b; map<srting ,char >  c: map<int,vector<i…
关联容器不同于顺序容器的是:顺序容器底层用数组实现,为线性结构:关联容器在实现中,用到的非线性存储方式: 顺序容器是通过元素在容器中的位置顺序存储和访问元素,而关联容器是通过键(key)存储和读取元素的.C++标准模板库中,关联容器有set.multiset.map.multimap.   1.底层原理 我们已经说过,关联容器底层实现是用非线性存储方式,那么这种非线性存储方式是什么呢? 答案是“红黑树”(RB-Tree),红黑树是平衡二叉树的一种,其有以下特点:   (1)所有左子树结点的值小于…
点击查看Evernote原文. #@author: gr #@date: 2014-08-23 #@email: forgerui@gmail.com STL中的关联容器. ###stl学习 |--迭代器 |--类属算法 |--容器 |--vector |--deque |--list |--set |--map |--函数对象 |--适配器 |--分配器 一.Contents 1. why关联容器 序列容器以线性排列方式保存数据项,并且各数据项保持了它们在插入时的相对位置,关联容器则摒弃了这种…
STL的基本使用之关联容器:map和multiMap的基本使用 简介 map 和 multimap 内部也都是使用红黑树来实现,他们存储的是键值对,并且会自动将元素的key进行排序.两者不同在于map 不允许key重复,而multiSet 允许key重复 头文件 #include< map > 构造函数及析构函数 非变动性操作函数 运算符重载 下标运算符 查找操作函数 赋值操作 迭代器操作 插入删除操作 范例如下 #include <iostream> #include <m…
STL的基本使用之关联容器:set和multiSet的基本使用 简介 set 和 multiSet 内部都是使用红黑树来实现,会自动将元素进行排序.两者不同在于set 不允许重复,而multiSet 允许重复 头文件 #include < set > 构造函数及析构函数 非变动性操作函数 运算符重载 查找操作函数 赋值操作 迭代器操作 插入删除操作 范例如下 #include <iostream> #include <set> using namespace std;…
1.关联容器的类型:map(键-值对的集合,可理解为关联数组), set(单纯的键的集合), multimap(一个键对应多个值,键唯一), multiset(相同键可以是多个). 2.pair类型提供的操作: a. pair(T1, T2) p1; 创建一个空的pair对象,它的两个元素分别是T1和T2类型,采用值初始化. b. pair(T1, T2) p2;创建一个pair对象,它的两个元素分别是T1和T2类型,其中first初始化为v1,second初始化为v2 c. make_pair…
练习11.1:描述map 和 vector 的不同. map是关联容器,vector是顺序容器,关联容器与值无关,vector则与值密切相关 练习11.2:分别给出最适合使用 list.vector.deque.map以及set的例子. list链表vector动态数组deque队列map映射set集合 练习11.3:编写你自己的单词计数程序. #include <iostream> #include <map> void words_count() { std::map<s…
C++关联容器<map>简单总结 map提供大小可变的关联容器,基于关联键值高效检索元素值.当你处理键值对的数据是,都可以考虑使用map关联容器. 特点: 大小可变的关联容器,基于关联键值高效检索元素值. 可逆,因为它提供双向迭代器来访问其元素. 有序,因为它的元素根据指定的比较函数按键值排序. 唯一. 因为它的每个元素必须具有唯一键. 关联容器对,因为它的元素数据值与其键值不同. 模板类,因为它提供的功能是一般性的功能,与元素或键类型无关. 用于元素和键的数据类型作为类模板以及比较函数和分配…
标准库提供8个关联容器 按关键字有序保存有(红黑树实现) set map multset 关键字可重复出现的set multimap  关键字可重复出现的map 无序保存 哈希实现 unorderred_map unorderred_set unorderred_multimap unorderred_multiset map是一个个pair类型组成 map<int, int>mp; for(auto i : mp){ printf("%d %d\n", i.first,…
本文介绍C++关联容器综合应用:TextQuery小程序(源自C++ Primer). 关于关联容器的概念及介绍,请参考园子里这篇博文:http://www.cnblogs.com/cy568searchx/archive/2012/10/08/2715306.html #include<iostream> #include<fstream> #include<sstream> #include<string> #include<map> #in…
第10章 关联容器 引: map set multimap multiset 1.pair类型 pair<string, int> anon anon.first, anon.second anon = make_pair(first, last) 2.关联容器 3.map类型 map<string, int> word_count; map<K, V>::key_type map<K, V>::mapped_type map<K, V>::va…
关联容器 与顺序容器不同,关联容器的元素是按keyword来訪问和保存的.而顺序容器中的元素是按他们在容器中的位置来顺序保存的. 关联容器最常见的是map.set.multimap.multiset map的元素以键-值[key-value]对的形式组织:键用作元素在map中的索引,而值则表示所存储和读取的数据. set仅包括一个键.并有效的支持关于某个键是否存在的查询. pair类型 首先介绍下pair,pair定义在utility头文件里,一个pair保存两个数据成员,类似容器,pair是一…
#include <iostream> #include <string> #include <map> #include <vector> using namespace std; //根据空格等将字符串,拆分成多个单词. vector<string> split(const string& s) { vector<string> ret; typedef string::size_type string_size; str…
STL的容器分为序列容器和关联容器.它们所表达的数据结构各有不同: 序列容器:vector(变长数组), list(链表), queue(队列), heap(堆算法)等 关联容器:set/mutilset,map/mutilmap,(都表达二叉树,且都由红黑树实现) 关联容器是指容器的元素为键值对(key-value),但这四种关联容器的键值对之间略有差异 一.set/mutilset set是集合之意,其键值对的键和值相同,那么set更像普通的二叉树即结点是键值和实值. set的键值不允许相同…
C++的容器类型可以分为顺序容器和关联容器两大类.顺序容器的知识可以参看我上篇的随笔<C++顺序容器知识总结>.关联容器支持通过键值来高效的查找和读取元素,这是它和顺序容器最大的区别.两种基本的关联容器类型是map和set.map的元素以键-值对的形式组织:键用作元素在map中的索引,而值则表示所存储和读取的数据.set仅包含一个键,并有效的支持关于某个键是否存在的查询.下表是关联容器的类型: map 关联数组:元素通过键来存储和读取 set 大小可变的集合,支持通过键实现快速读取 multi…
// 为包含指针的关联容器指定比较类型.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <set> #include <string> #include <iostream> using namespace std; struct StringPtrLess: public binary_function<const string*, const string*, bool> {…
一.关联容器 C++的容器类型可以分为顺序容器和关联容器两大类.对于关联容器,主要有map和set,对于这两种,根据不同的维度,衍生出了8种容器 map                                      //值对 set                                         //仅有值 multimap                               //允许关键字重复的值对 multiset                     …
1.关联容器支持高效的关键字查找和访问,标准库提供8个关联容器. 2.如果一个类型定义了“行为正常”的 < 运算符,则它可以用作关键字类型. 3.为了使用自己定义的类型,在定义multiset时必须提供两个类型:自定义类类型以及比较操作类型(函数指针). class test { public: test(int i) { m_id = i; } int m_id; }; bool compare_test(const test& t1, const test& t2) { retu…
关联容器的特点 1.每个关联容器都有一个键(key) 2.可以根据键高效查找元素 集合set 集合用来存储一组无重复的元素,由于集合的元素本身是有序的,可以高效地查找元素,也可以方便地指定大小范围的元素在容器中所处的区间. STL算法的特点 STL算法本身是一种函数模板 通过迭代器获得输入数据 通过函数对象对数据进行处理 通过迭代器将结果输出 STL算法是通用的,独立于具体的数据类型,容器类型 STL算法分类 不可变序列算法 可变序列算法 排序和搜索算法 数值算法…
list 双向链表,可以双向遍历,既指向前驱节点,又指向后继但不能随机访问任意元素,可动态增加或者减少元素,内存管理自动完成,增加任何元素都不会使迭代器失效, 删除元素时,除了指向当前被删元素的迭代器外,其他迭代器都不会失效 iterator指向当前被删除元素的下一个. deque vector是单向开口的连续空间,deque是双向开口的连续线性空间 双向开口则意味着可以在头尾两端分别插入或者删除元素 关联容器和顺序容器的区别在于:关联容器通过key存储读取元素,而顺序容器则是通过元素在容器中的…
练习答案 一.访问元素 关联容器额外类型别名  key_type 此容器类型的关键字类型 mapped_type 每个关键字关联的类型,只 适用于map mapped_type 对于set,与key_type相同对于map,为pair<const key_type, mapped_type> 二.关联容器迭代器 当解引用一个关联容器的迭代器时,我们会得到一个类型为容器的valued_type的值的引用.对map而言,value_type是一个pair类型,其first成员保存const的关键字…