一:Map(字典)的常见用法
map-赋值与遍历:
基于红黑树实现的有序键值对容器(键唯一,自动按键排序)
定义一个名为mp的map
map<char,int> mp;
输入n对字符key和正整数val,每输入一对,就令mp[key]=val

正向遍历mp,输出所有key和val。
用it->first,it->second输出
it 可以用auto来自动判断类型 it是迭代器,元素输出形式与指针相同。
访问指针的某个元素用->,不是指针用 .

mp.find()
find() 是 map 容器中查找指定键的核心成员函数,作用是:
- 在 map 中查找是否存在指定的 key;
- 若找到:返回指向该键值对的迭代器;
- 若未找到:返回 map 的 end() 迭代器(表示超出最后一个元素的位置)。
-
find() 仅查找不修改容器。
-
找到键指向该键值对的迭代器,通过 it->first 访问键,it->second 访问值
-

mp.erase():
erase() 是 map 容器中删除键值对的核心成员函数,键没了value也没了
1. 按「键」删除

2. 按「迭代器」删除(精准删除)

3. 按「迭代器范围」删除(批量删除)
传入起始和结束迭代器(左闭右开 [first, last)),删除范围内所有键值对;返回指向下一个元素的迭代器

mp.clear()
删除容器中所有的键值对,使容器变为空(size() 变为 0),但不会释放容器底层分配的内存(可手动释放)
mp.size()
size() 是 map 容器的成员函数,作用是返回当前容器中键值对的个数(即元素数量),返回值类型为 size_type(本质是无符号整数类型,对应 unsigned long 或 unsigned int)。
map-访问与操作
可以使用map统计string的出现次数
输入n个字符串str,对每个str,如果mp中不存在它,那么令mp[str]=1,否则令mp[str]++;

二:queue的常见用法
定义一个空的queue<int>,命名为q
queue<int> q;
q.push()
将元素添加到队列的尾部(队尾)

q.pop()
删除队列的队首元素,pop () 仅删除元素,无返回值。调用后队列 size() 减 1。
q.front()&&q.back()
front() 和 back() 分别用于访问队首和队尾元素,是读取队列内容的唯一直接方式

q.empty()
判断当前队列是否为空,q.empty() 返回一个 bool 类型(布尔类型)的值,只有两种可能 ——true 或者 false
q.size()
返回当前队列中键值对(元素)的个数。
三:priority_queue的常见用法
队首始终是优先级最高的元素(默认是「最大值优先」);
不支持随机访问,仅能访问队首(优先级最高)元素,出队也只能删除队首
定义一个空的priority_queue<int>,命名为q
priority_queue<int> q;(大顶堆)
小顶堆(最小值优先)定义:
priority_queue<int, vector<int>, greater<int>> pq;
q.push()
push(val)入队:将元素插入堆,自动调整结构保证队首是优先级最高的元素。
q.pop()
删除队列中优先级最高的元素(堆顶元素),且仅删除、无返回值。
q.top()
返回队列中优先级最高的元素的引用(即「堆顶」元素)
普通队列用 front() 访问队首,优先队列只能用 top(),无 front()/back() 方法。
q.empty()
判断当前优先队列是否为空(无任何元素),返回值:bool 类型(true 表示空,false 表示非空)。
q.size()
返回当前优先队列中元素的个数,返回值类型为 size_type(本质是无符号整数类型,通常对应 unsigned long 或 unsigned int);它是「只读操作」,不会修改队列内容,也不会触发堆结构调整。
priority_queue-结构体(要记住)

蓝色部分是固定的。
四:stack的常见用法
定义一个空的stack<int>,命名为s
stack<int> s;
s.push()
将元素添加到栈的顶部(栈顶)
入栈后栈的 size() 加 1,top() 会指向这个新入栈的元素
s.pop()
删除栈顶元素(最后入栈的元素)无返回值,仅删除,调用后 size() 减
s.top()
返回栈顶元素的引用(最后入栈的元素)
s.empty()
判断栈是否为空(无任何元素),bool 类型(true 空 /false 非空)
s.size()
获取栈中当前的元素个数无符号整数(size_type),实时更新
五:pair的常见用法
定义一个pair<string, int>,命名为p;
pair<string,int> p;
make_pair()
输入一对元素 没有键和值之分,单纯的两个值

也可以直接赋值给p
pair<string,int> p=make_pair(str,k);
p.first&&p.second
- first:第一个元素(对应 make_pair(a, b) 中的 a,或 pair<T1,T2>(a,b) 中的 a);
- second:第二个元素(对应 make_pair(a, b) 中的 b,或 pair<T1,T2>(a,b) 中的 b);

pair-比较
pair 支持直接用 ==、!=、<、> 等运算符比较,核心遵循「先比第一个元素,再比第二个元素」的字典序规则。
- 优先比较 first 成员:若 a.first != b.first,则直接根据 first 的比较结果确定 a 和 b 的大小;
- 仅当 first 相等时,才比较 second 成员:根据 second 的比较结果确定最终大小。


