欢迎光临
我们一直在努力

C++标准模板库(STL):map;queue;priority_queue;stack;pair

一: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-结构体(要记住)

  • 定义结构体类型Fruit,其中包含string类型的成员name和int类型的成员price,分别代表水果的名称和价格;
  • 在结构体Fruit内部重载<操作符,对两个Fruit变量f1与f2,当f1.price > f2.price时认为f1 < f2成立;
  • 蓝色部分是固定的。

    四: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 的比较结果确定最终大小。

    赞(0)
    未经允许不得转载:171主机测评 » C++标准模板库(STL):map;queue;priority_queue;stack;pair
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址