c++写一个程序完成以下命令: new id ——新建一个指定编号为id的序列(id<10000) add id num——向编号为id的序列加入整数num merge id1 id2——合并序列id1和id2中的数,并将id2清空 unique id——去掉序列id中重复的元素。输入的是第一行一个数n,表示有多少个命令(n<=200000)。以后n行每行一个命令 每行输出的末尾没有空格
时间: 2023-10-25 08:06:30 浏览: 180
下面是一个简单的实现:
```c++
#include <iostream>
#include <set>
#include <vector>
using namespace std;
const int MAX_ID = 10000;
vector<set<int>> seqs(MAX_ID);
void newSeq(int id)
{
if (id >= MAX_ID)
{
cout << "Error: invalid id." << endl;
return;
}
if (!seqs[id].empty())
{
cout << "Error: sequence already exists." << endl;
return;
}
seqs[id] = set<int>();
}
void addNum(int id, int num)
{
if (id >= MAX_ID || seqs[id].empty())
{
cout << "Error: invalid id." << endl;
return;
}
seqs[id].insert(num);
}
void mergeSeq(int id1, int id2)
{
if (id1 >= MAX_ID || id2 >= MAX_ID || seqs[id1].empty() || seqs[id2].empty())
{
cout << "Error: invalid id." << endl;
return;
}
seqs[id1].insert(seqs[id2].begin(), seqs[id2].end());
seqs[id2].clear();
}
void uniqueSeq(int id)
{
if (id >= MAX_ID || seqs[id].empty())
{
cout << "Error: invalid id." << endl;
return;
}
set<int> uniqueNums;
for (int num : seqs[id])
{
uniqueNums.insert(num);
}
seqs[id] = uniqueNums;
}
int main()
{
int n;
cin >> n;
for (int i = 0; i < n; i++)
{
string cmd;
int id, id1, id2, num;
cin >> cmd;
if (cmd == "new")
{
cin >> id;
newSeq(id);
}
else if (cmd == "add")
{
cin >> id >> num;
addNum(id, num);
}
else if (cmd == "merge")
{
cin >> id1 >> id2;
mergeSeq(id1, id2);
}
else if (cmd == "unique")
{
cin >> id;
uniqueSeq(id);
}
}
return 0;
}
```
注意,这里使用了 STL 中的 set 容器来存储序列中的数字,并且使用了 vector 来存储所有的序列。同时,对于一些无效的操作(如 id 超过上限或者对不存在的序列操作),输出错误信息。
阅读全文