P9518 queue 题解

发布时间 2023-08-17 23:04:29作者: Code_Fish_Hp

题目传送门

思路

一道稍稍有点复杂的模拟好题。

本题的关键性就在于需要实现的 leave 函数必须支持任意位置的删除,任意元素的查询,这对于 queue 或是 deque 是十分不利的。

故本题使用另外一种 STL: list 实现。

但是,list 的查询其实也是比较耗费时间的,那么我们可以使用 \(Map\) 来映射出每一个人的标号即可。

创建一个没有任何元素的空 list 容器:std::list<T> values;

下附 list 常用代码:

方法 作用
begin() 返回指向容器中第一个元素的双向迭代器。
end() 返回指向容器中最后一个元素所在位置的下一个位置的双向迭代器。
rbegin() 返回指向最后一个元素的反向双向迭代器。
rend() 返回指向第一个元素所在位置前一个位置的反向双向迭代器。
size() 返回当前容器实际包含的元素个数。
front() 返回第一个元素的引用。
back() 返回最后一个元素的引用。
push_front() 在容器头部插入一个元素。
pop_front() 删除容器头部的一个元素。
push_back() 在容器尾部插入一个元素。
insert() 在容器中的指定位置插入元素。
erase() 删除容器中一个或某区域内的元素。
remove(val) 删除容器中所有等于 val 的元素。
remove_if() 删除容器中满足条件的元素。
count() 查询容器中某值的出现次数。

最后依照题意模拟即可。