c++map/set讲解

介于我班董##同学竟然不会用map和set,所以今天来发个帖。

C++中 map的了解与基本用法(代码演示)

一:map的基本认识

Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。这里说下map内部数据的组织,map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的,后边我们会见识到有序的好处。

二:map的基本操作函数(建议了解map常用的函数 以后用到啥 再学啥)
C++ Maps是一种关联式容器,包含“关键字/值”对
begin() 返回指向map头部的迭代器
clear() 删除所有元素
count() 返回指定元素出现的次数
empty() 如果map为空则返回true
end() 返回指向map末尾的迭代器
equal_range() 返回特殊条目的迭代器对
erase() 删除一个元素
find() 查找一个元素
get_allocator() 返回map的配置器
insert() 插入元素
key_comp() 返回比较元素key的函数
lower_bound() 返回键值>=给定元素的第一个位置
max_size() 返回可以容纳的最大元素个数
rbegin() 返回一个指向map尾部的逆向迭代器
rend() 返回一个指向map头部的逆向迭代器
size() 返回map中元素的个数
swap() 交换两个map
upper_bound() 返回键值>给定元素的第一个位置
value_comp() 返回比较元素value的函数

三:构造map
map最基本的构造函数 map<关键字,键值> mp。

//如:map<string,int> mp;

这里是最基本的讲解,接下来是set。
一、set 的概念
set 的含义是集合,它是一个有序的容器,里面的元素都是排序好的,支持插入,删除,查找等操作,就像一个集合一样。所有的操作的都是严格在logn时间之内完成,效率非常高。set 和 multiset 的区别是:set 插入的元素不能相同,但是 multiset 可以相同。其特点如下:

每个元素的键值都唯一,不允许两个元素有相同的键值。

所有元素都会根据元素的键值自动排序(默认从小到大)。

set 中的元素不像 map 那样可以同时拥有实值(value)和键值(key),只能存储键,是单纯的键的集合。

set 中元素的值不能直接被改变。

set 支持大部分的map的操作,但是 set 不支持下标的操作,而且没有定义mapped_type类型。

二、set 的基本操作

使用STL标准库的 set 时,应包含头文件:#include
(或者万能头)
1、set 的定义及初始化

set<Type> s						      //定义一个set容器
set<Type> s(s1)			              //定义一个set容器,并用容器s1来初始化
set<Type> s(b, e)					  //b和e分别为迭代器的开始和结束的标记
set<Type> s(s1.begin(), s1.begin()+3) //用容器s1的第0个到第2个值初始化s
set<Type> s(a, a + 5)      		      //将a数组的元素初始化vec向量,不包括a[4]
set<Type> s(&a[1], &a[4]) 			  //将a[1]~a[4]范围内的元素作为s的初始值

2、set 的基本操作

s.begin()					//返回指向第一个元素的迭代器
s.end()						//返回指向最后一个元素的迭代器
s.clear()					//清除所有元素
s.count()					//返回某个值元素的个数
s.empty()					//如果集合为空,返回true,否则返回false
s.equal_range()				//返回集合中与给定值相等的上下限的两个迭代器
s.erase()					//删除集合中的元素
s.find(k)					//返回一个指向被查找到元素的迭代器
s.insert()					//在集合中插入元素
s.lower_bound(k)			//返回一个迭代器,指向键值大于等于k的第一个元素
s.upper_bound(k)			//返回一个迭代器,指向键值大于k的第一个元素
s.max_size()				//返回集合能容纳的元素的最大限值
s.rbegin()					//返回指向集合中最后一个元素的反向迭代器
s.rend()					//返回指向集合中第一个元素的反向迭代器
s.size()					//集合中元素的数目

当然,这两种STL容器还有非常多的用法!

11 个赞

之前我也写过一个STL的
不过有点水(但是讲的多)qwq
关于STL模板 - 常规 - 信友队论坛 (xinyoudui.com)

3 个赞

主要是我们班同学想要

6 个赞

(帖子已被作者删除)

2 个赞

:face_with_monocle:那位是手动的(删帖)?看不到:pencil2:符号

3 个赞

可能被举报了

5 个赞

孩子很爱吃,会回购

2 个赞

谢谢 :crazy_face:

5 个赞

有没有一种可能,我发的就是“(帖子已被作者删除)”

2 个赞

(帖子已被作者删除)

3 个赞

事实上对于活跃用户和管理员,删了好像也可以看,只是不会被惩罚