#include <unordered_set>unordered_set<int> unique_nums;有什么用
时间: 2024-03-11 17:39:43 浏览: 123
#include <unordered_set> 是一个头文件的引用,它提供了无序集合的功能。具体来说,unordered_set是C++标准库中的一个容器,它存储唯一的元素,且元素没有特定的顺序。在你给出的代码中,unordered_set<int> unique_nums; 创建了一个名为unique_nums的无序集合,其中存储的元素类型是int。这个集合可以用来存储一组不重复的整数,且不需要按照特定的顺序进行操作。
相关问题
2.删除数组中所有重复元素 输入样例: 5 1 3 1 2 3 输出样例: 1 3 2 c++ vector <int>,push_back,erase()方法实现
在C++中,我们可以使用`vector`容器以及`push_back()`方法添加元素,并通过`erase()`方法删除重复元素。一种常见的做法是遍历整个向量,对于每个元素,检查它之后是否有相同的元素,如果有则使用`erase()`方法移除后续的重复项。以下是这个过程的一个简短示例:
```cpp
#include <iostream>
#include <vector>
#include <unordered_set>
void removeDuplicates(std::vector<int>& nums) {
std::unordered_set<int> uniqueSet; // 使用无序集合存储唯一元素
for (size_t i = 0; i < nums.size(); ++i) {
if (uniqueSet.find(nums[i]) == uniqueSet.end()) { // 如果元素不在集合中
uniqueSet.insert(nums[i]); // 添加到集合中并保留
nums.erase(nums.begin() + i); // 移除当前索引处的重复元素
i--; // 因为元素数量减少,需要调整下一次循环的起点
}
}
}
int main() {
int n;
std::cin >> n;
std::vector<int> nums(n);
for (size_t i = 0; i < n; ++i)
std::cin >> nums[i];
removeDuplicates(nums);
// 输出结果
for (const auto& num : nums)
std::cout << num << " ";
std::cout << "\n";
return 0;
}
```
在这个例子中,我们先创建了一个`std::unordered_set`来存储唯一的整数。然后遍历输入的`vector`,如果遇到的元素还未出现在集合中,就将其加入集合并且保持在`vector`中。如果遇到重复元素,我们就从`vector`中移除它。
用C++Write a program to complete the following command: new id - create a specified sequence of Numbers for id (id < 200000) Add id num - to join the sequence of Numbers for id integer num merge id1 id2 - merger sequence number of id1 and id2, and make id2 empty unique id - remove repetitive element in the sequence id out id - from small to large, output the elements of sequence of Numbers for ids separated by Spaces Input The First Line is n which mean the number of the Command (n <= 200000). The next n lines are correct Command. You don't have to worry wrong input and id is int. Output Then output according the requirements.
以下是用C++编写的程序,实现上述命令功能:
```c++
#include <iostream>
#include <algorithm>
#include <vector>
#include <set>
#include <unordered_map>
using namespace std;
unordered_map<int, vector<int>> seqs; // 用哈希表存储每个id对应的序列
set<int> unique_nums; // 用set存储去重后的数字
void create(int id)
{
vector<int> seq;
for (int i = 1; i <= id; ++i) {
seq.push_back(i);
}
seqs[id] = seq;
}
void add(int id, int num)
{
seqs[id].push_back(num);
}
void merge(int id1, int id2)
{
auto& seq1 = seqs[id1];
auto& seq2 = seqs[id2];
for (auto num : seq2) {
seq1.push_back(num);
}
seq2.clear();
}
void unique(int id)
{
auto& seq = seqs[id];
unique_nums.clear();
for (auto num : seq) {
unique_nums.insert(num);
}
seq.clear();
for (auto num : unique_nums) {
seq.push_back(num);
}
}
void out(int id)
{
auto& seq = seqs[id];
sort(seq.begin(), seq.end());
for (auto num : seq) {
cout << num << " ";
}
cout << endl;
}
int main()
{
int n;
cin >> n;
while (n--) {
string cmd;
cin >> cmd;
if (cmd == "new") {
int id;
cin >> id;
create(id);
}
else if (cmd == "add") {
int id, num;
cin >> id >> num;
add(id, num);
}
else if (cmd == "merge") {
int id1, id2;
cin >> id1 >> id2;
merge(id1, id2);
}
else if (cmd == "unique") {
int id;
cin >> id;
unique(id);
}
else if (cmd == "out") {
int id;
cin >> id;
out(id);
}
}
return 0;
}
```
程序思路:
- 用unordered_map存储每个id对应的序列,用set存储去重后的数字。
- 对于每个命令,根据命令类型执行相应的操作。
- 对于“create”命令,创建一个长度为id的序列。
- 对于“add”命令,将数字num添加到id对应的序列中。
- 对于“merge”命令,将id2对应的序列合并到id1对应的序列中。
- 对于“unique”命令,对id对应的序列进行去重。
- 对于“out”命令,从小到大输出id对应的序列中的数字,数字之间用空格隔开。
注意事项:
- 由于id的范围是小于200000的整数,因此可以直接使用vector存储每个id对应的序列,而无需使用链表等动态数据结构。
- 由于输入命令没有错误,因此可以直接使用cin读取命令和参数,而无需使用getline等函数进行处理。
阅读全文
相关推荐















