文档章节

c++常用的数据结构之一  std::map  

刘大神
 刘大神
发布于 2017/11/02 18:48
字数 442
阅读 225
收藏 0

 

1.什么是map?    std::map是包含具有唯一键的键值对的排序关联容器。按照使用比较功能对密钥进行排序Compare。搜索,删除和插入操作具有对数复杂性。map通常实现为红黑树。

2.map如何按照键排序?        在map的实现中,已经提供给使用者进行排序的参数。map的实现如下:
    template<class _Kty,
    class _Ty,
    class _Pr = less<_Kty>,
    class _Alloc = allocator<pair<const _Kty, _Ty> > >
    class map
        : public _Tree<_Tmap_traits<_Kty, _Ty, _Pr, _Alloc, false> >{}

    缺省参数_Pr 的参数是less<_Kty>,map就是通过这个方法进行排序的

3.如何不让map排序?        由map实现就可以看出,只要我们提供一个仿函数,函数里面重载(),重载里面什么操作都不做就可以

4.map如何按照key值来取值?          在map类中,重载了[],利用 map[key]就可以取到对应的值

5. map如何按照索引取值? (这里面的索引指的是位置)        在map里面,实现了一个方法at,基本容易都会提供这个方法,这个方法可以根据位置获取到值。实现原理就是,遍历红黑树,如果父节点所在的位置和索引相等,则返回值

6.map是不是线程安全?        map不是线程安全的,在stl中,大部分都不是线程安全的

7.如何设计一个线程安全的map?    最简单的方法就是用互斥量,通用方法是读写锁

8.剩下的对于map来说,就是它的api了,值得注意的是在c++11之后,成员方法后面带emplace的,都是效率更高的方法    

© 著作权归作者所有

刘大神
粉丝 8
博文 21
码字总数 18133
作品 0
朝阳
高级程序员
私信 提问
GCC  4.4.1 发布在即,C++ 0x 标准支持大幅进步

请注意,以下所有特性都需要在命令行指定 或 来启用!! GCC 4.4 相对于 4.3 版最大的变化就是对 C++ 0x 标准支持有了大幅提升(当然,还有很多其他方面的改变,不过我个人比较关注 C++),已支...

红薯
2009/04/24
2.2K
0
Map以自定义类做为键值

map在STL中的定义 template , class Alloc = alloc> 第一个参数Key是关键字类型 第二个参数T是值类型 第三个参数Compare是比较函数(仿函数) 第四个参数是内存配置对象 map内部存储机制实际...

晨曦之光
2012/04/13
1K
0
十STL容器

STL容器 顺序容器 顺序容器将单一类型的元素聚集起来,然后根据位置来存储和访问这些元素。顺序容器的元素排列次序与元素值无关,而是由元素添加到容器里的次序决定。 STL中最常用的顺序容器...

长平狐
2012/08/28
272
0
如何利用 C++ 的 Lambda 表达式提升 Qt 代码

原文出处:oschina Lambda 表达式是在 C++11 中加入的 C++ 特性。在这篇文章中我们将看到如何用 Lambda 表达式来简化 Qt 代码。Lambda 很强大,但也要小心它带来的陷阱。 首先,什么是 Labm...

oschina
2017/02/09
0
0
在 Qt4 中使用 C++11

在 Qt4 中使用 C++11 原文出处:blog.qt.digia.com/cn/2011/08/22/cpp0x-in-qt 我们前面介绍了许多 C++ 11 的优点,而且介绍了如何在 Qt 5 中使用 C++ 11。但是,Qt 5 毕竟只是一个尚未发布的...

ruguonandao
2013/03/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

巨杉Tech | 微服务趋势下的数据库设计与应用简析

上周五(7月12日)巨杉数据库参与了由得到App主办八里庄技术沙龙活动,分享主题是关于分布式数据库架构与实战。 以下就是根据巨杉数据库现场分享的内容进行的分享实录整理。 巨杉数据库简介 ...

巨杉数据库
17分钟前
9
0
借助URLOS快速安装AliSQL

环境需求 最低硬件配置:1核CPU,1G内存(1+1)提示:如果你的应用较多,而主机节点的硬件配置较低,建议在部署节点时开通虚拟虚拟内存; 生产环境建议使用2G或以上内存; 推荐安装系统:Ubu...

躲猫猫_007
18分钟前
0
0
DM 源码阅读系列文章(九)shard DDL 与 checkpoint 机制的实现

作者:张学程 本文为 DM 源码阅读系列文章的第九篇,在 上篇文章 中我们详细介绍了 DM 对 online schema change 方案的同步支持,对 online schema change 同步方案以及实现细节等逻辑进行了...

TiDB
20分钟前
0
0
mysql指令

mysql指令 连接数据库 mysql -h 127.0.0.1 -u root -p -h : 数据库地址 -u : 用户名 -p : 密码 显示所有数据库 show databases; //显示所有数据库use XXX; //使用指定数据库show t...

xiaobai1315
24分钟前
0
0
C++STL常见面试题

1.C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构操作。vector封装数组,...

shzwork
34分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部