1、map容器是STL中的一种具备自动排序功能的关联式容器。它提供了一对一的数据处理能力(其中第一个称为关键字,相当于索引,每个关键字在map中唯一,也是排序的主要依据;第二个称为该关键字的值,可以是任意类型),维护数据的对象是pair类型的键值对。pair
2、pair类型叫做对组,底层是模板结构体,提供两个模板参数。也就是pair
3、map底层结构是红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的。并且不会存在重复关键字。
4、multimap和map具备同样的功能,但允许容器内出现重复关键字。
1、map
2、map
3、map
4、map
5、map
6、map
map和set一样通过模板参数列表自定义排序方式。编译器默认内置数据类型例如int、double、string均为递增排序,需要递减排序或者关键字为自定义数据时,必须添加自定义排序类型。同样提供了多种重载,需根据实际情况灵活选用。
1、iterator map
2、iterator map
3、iterator map
4、iterator map
cbegin()、cend()、crbegin()、crend() 分别返回以上4种的常量迭代器
1、size_t map
2、size_t map
3、bool map
1、const T2& map
2、T2& map
3、T2& map
以上3种访问函数传入参数均为关键字,而不是下标。当容器中关键字不存在时会出现出界问题。所以在使用前务必确认map容器中存在关键字,才可作为索引值传入。
插入元素必须为键值对,同样map元素调用插入函数,返回了对组
1、insert(const pair
例1 insert(pair
例2 insert(make_pair(T1_value,T2_value);
例3 insert(map
2、insert(iterator pos,const pair
3、inset(initializer _list); 插入初始化列表,这个列表是pair类型的列表
4、insert(itrator first,itertor last); 插入区间,提供的迭代器必须是储存相同pair类型的容器迭代器
5、insert(const pair
6、emplace(pair
7、map
1、size_t map
2、iterator map
3、iterator map
4、void map
1、iterator map
2、size_t map
3、iterator map
4、iterator map
5、pair
1、数据结构采用红黑树,自身是有序的,插入数据时会自动排序。
2、内部结构采用红黑树,时间复杂度低,效率高。
3、索引方便,可以通过下标key方便的进行存取。
4、所有元素都会根据元素的键值自动排序。
5、不能通过map的迭代器改变键值。因为键值关系搞map元素的排列规则,任意改变map键值,将会严重破坏map组织,修改元素的实值是可以的。
6、在对容器元素进行新增或删除操作时,操作之前的所有迭代器,在操作完成后,依然有效;被删除的那个元素的迭代器无效。
1、map内部采用红黑数实现,需要额外空间保存节点,会占用多余的空间,典型的以“空间换时间”。
2、使用at()索引时,要确定容器内存在传入的关键字,否则会抛出异常;使用[]索引时,如果容器内没有传入关键字,容器会自动添加改关键字的键值对。
1、map容器中的元素是pair类型,每个元素包含两个部分:键(key)和值(value)。键是唯一的,而值可以是重复的。在map中不能插入具有相同键的元素。若需要插入相同键的元素,可以使用multimap。
2、map容器的迭代器是双向的,这意味着在遍历过程中删除元素可能会导致未定义的行为。因此,在遍历过程中不应该删除元素。如果需要在遍历过程中删除元素,可以先将需要删除的元素保存下来,遍历完成后再进行删除。
3、map容器中的元素是按照键的顺序进行排序的,因此在使用map容器时需要注意键的类型和比较函数。如果需要自定义比较函数,可以使用map容器的比较函数适配器进行设置。
4、map容器的查找操作的时间复杂度为O(log n),其中n是map容器中元素的数量。因此,在处理大量数据时,使用map容器可以提高查找效率。但是需要注意的是,由于map容器需要维护元素的顺序,因此在插入和删除元素时可能会比其他容器慢一些。
5、map容器可以用于存储不同类型的元素,例如int和string等。在使用不同类型的元素时需要注意数据的兼容性和比较函数的设置。