📅  最后修改于: 2023-12-03 15:12:47.455000             🧑  作者: Mango
这道题是一个典型的模拟题,需要我们根据题目给出的要求模拟实现一个程序。
题目要求我们实现一个门禁系统,这个系统有以下几个功能:
我们可以使用 STL 中的 set 模拟白名单,因为 set 内部是有序的,可以快速地进行插入和删除操作。对于判断是否在白名单中,我们可以利用 set 的 find 函数查找。
我们需要注意的是,C++11 中的 set 有一个新的成员函数 emplace ,它可以直接在 set 中插入元素,并且可以避免多次复制。因此我们可以尽量使用 emplace 而不是 insert 函数。
#include <iostream>
#include <set>
using namespace std;
int main()
{
set<int> whitelist;
int n;
cin >> n;
while (n--)
{
string op;
int card;
cin >> op >> card;
if (op[0] == 'i')
{
whitelist.emplace(card);
}
else if (op[0] == 'd')
{
whitelist.erase(card);
}
else if (op[0] == 'q')
{
auto iter = whitelist.find(card);
if (iter != whitelist.end())
{
cout << "yes\n";
}
else
{
cout << "no\n";
}
}
}
return 0;
}
这段代码首先创建了一个 set,然后读入一个数字 n,表示操作次数。接下来在循环中读入每一次的操作和卡号,根据操作类型('i','d','q')进行相应的处理。对于插入操作,使用 emplace 函数插入新元素,对于删除操作,使用 erase 函数删除元素,对于查询操作,使用 find 函数查找元素,如果找到就输出 "yes",否则输出 "no"。
这道题是一个典型的模拟题,我们可以使用 STL 中的 set 来实现白名单,需要注意使用 emplace 而不是 insert 函数。这种模拟题可以帮助我们熟悉 C++ STL 的使用,掌握一些常见的数据结构和算法。