栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

STL容器-Map与Multimap-导读-能力-操作函数

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

STL容器-Map与Multimap-导读-能力-操作函数

0.导读

Map和 multimap将key/value pair当作元素进行管理。它们可根据key的排序准则自动为元素排序。Multimap允许重复元素,map 不允许。

使用map和 multimap之前,你必须先包含头文件:

#include
There, the types are defined as class templates inside namespace std:
namespace std {
template typename Compare = less,
typename Allocator = allocator > >
class map;
template typename Compare = less,
typename Allocator = allocator > >
class multimap;
}

第一个template实参将成为元素的key类型,第二个template实参将成为元素的value类型。Map和 multimap的元素类型Key和T必须满足以下两个条件:

1. Key和 value都必须是copyable (可复制的)或movable(可搬移的)。

2. 对指定的排序准则而言,key必须是comparable(可比较的)。


注意,元素类型(value_type)是个pair 。第三个template实参可有可无,用来定义排序准则。和set一样,这个排序准则必须定义为strict weak ordering(见7.7节第314页)。元素的次序由它们的key 决定,和value无关。排序准则也可以用来检查相等性:如果两个元素的key彼此都不小于对方,两个元素被视为相等。

1.Map和Multimap的能力

和其他所有关联式容器一样, map/multimap通常以平衡二叉树完成,如图7.15所示。C++standard并未明定这一点,但是从map和multimap各项操作的复杂度自然可以得出这一结论。通常set、multiset、 map和multimap使用相同的内部结构,因此,你可以把set和multiset视为特殊的 map和 multimap,只不过set元素的 value和 key是同一对象。因此,map和multimap拥有set和 multiset 的所有能力和所有操作。当然,某些细微差异还是有的: 首先,它们的元素是key/value pair,其次, map可作为关联式数组(associative array)来运用。

Map和multimap 会根据元素的key自动对元素排序。这么一来,根据已知的key查找某个元素时就能够有很好的效率,而根据已知value查找元素时,效率就很糟糕。“自动排序”这一性质使得 map和 multimap身上有了一条重要限制: 你不可以直接改变元素的key,因为这会破坏正确次序。要修改元素的key,必须先移除拥有该key的元素,然后插入拥有新key/value的元素(详见7.8.2节)。从迭代器的观点看元素的key是常量。至于元素的value倒是可以直接修改,当然前提是value并非常量。
 

2.Map和Multimap的操作函数 2.1 创建,赋值,销毁
OperationEffect效果
map cDefault constructor; creates an empty map/multimap
without any elements
默认构造函数,建立一个空map/multimap,不含任何元素
 
map c(op)Creates an empty map/multimap that uses op as the
sorting criterion
建立一个空map/multimap,以op为排序准则
map c(c2)Copy constructor; creates a copy of another
map/multimap of the same type (all elements are copied)
拷贝构造函数,为相同类型的另一个map/multimap建立一份拷贝,所有元素均被复制
map c = c2Copy constructor; creates a copy of another
map/multimap of the same type (all elements are copied)
拷贝构造函数,为相同类型的另一个map/multimap建立一份拷贝,所有元素均被复制
map c(rv)Move constructor; creates a new map/multimap of the
same type, taking the contents of the rvalue rv (since
C++11)
移动构造函数,建立一个新的map/multimap,有相同类型,取rvalue rv的内容(始自C++11)
 
map c = rvMove constructor; creates a new map/multimap of the
same type, taking the contents of the rvalue rv (since
C++11)
移动构造函数,建立一个新的map/multimap,有相同类型,取rvalue rv的内容(始自C++11)
map c(beg,end)Creates a map/multimap initialized by the elements of the
range [beg,end)
以区间[beg,end)内的元素为初值,建立一个map/multimap
map c(beg,end,op)Creates a map/multimap with the sorting criterion op
initialized by the elements of the range [beg,end)
以区间[beg,end)内的元素为初值,并以op为排序准则,建立一个map/multimap
map c(initlist)Creates a map/multimap initialized with the elements of
initializer list initlist (since C++11)
建立一个map/multimap,以初值列initlist的元素为初值(始自C++11)
 
map c = initlistCreates a map/multimap initialized with the elements of
initializer list initlist (since C++11)
建立一个map/multimap,以初值列initlist的元素为初值(始自C++11)
 
c.~map()Destroys all elements and frees the memory销毁所有元素,释放内存

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/741300.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号