我的代码:
#include <iostream>//引入输入输出流,用于后续的输入输出操作
#include <map>//引入map容器,它是一个关联容器,存储键值对
//map会自动按照键值进行排序
#include <vector>//引入vector容器,但在此代码中并没有实际使用vector
using namespace std;
//表示使用标准命名空间,避免后续使用标准库中的类和函数时需要加上std::前缀
int main() {
int n1, n2, t;
/*int n1, n2, t; 声明了三个整数变量:
n1 用于存储第一个整数序列的元素数量
n2 用于存储第二个整数序列的元素数量
t 用于存储当前输入的元素值*/
while (cin >> n1) {
//循环读取输入的n1,直到输入结束(例如文件输入流结束或ctrl+d)
map<int, int> m;
/*声明了一个map容器m,其键值对为int类型
键为输入的整数,值为该整数出现的次数
(在这里实际上是统计了该整数的出现次数)*/
for (int i = 0; i < n1; ++i) {
//循环读取第一个整数序列的n1个元素
cin >> t;
//从输入流中读取一个整数t
m[t]++;
/*将该整数t的计数值加1,map自动为t创建一个键值对,
如果t不存在,map会自动创建,并将计数值初始化为0,再加1*/
}
cin >> n2;
//读取第二个整数序列的元素数量
for (int i = 0; i < n2; ++i) {
cin >> t;
//读取第二个序列的n2个整数
m[t]++;
//将每个整数在map中相应位置的计数值加1
}
for (auto it : m) {
//遍历map容器中的每个键值对
//输出每个唯一整数
cout << it.first;
/*it.first 表示当前map元素的键(即整数本身),
因为map会按键自动排序,所以这里输出的是按升序排列的唯一整数*/
}
cout << endl;
//输出换行,表示输出结束
}
return 0;
}
这个代码的思路是通过输入两个整数序列,统计它们出现的每个数字,最后输出所有唯一数字的集合,且按升序排列。
代码总结:
-
引入库:
<iostream>
:用于输入输出<map>
:用于存储键值对,自动按键进行排序<vector>
:此处虽然引入,但并未实际使用
-
主函数解析:
-
声明变量:
n1
,n2
用于存储两个整数序列的长度t
用于存储当前输入的数字
-
读取数据并处理:
- 通过
while(cin >> n1)
循环持续输入数据,直到输入结束 - 对于每个输入的整数序列,使用
map<int, int> m
来存储每个数字及其出现的次数 - 第一个序列的数字依次读入,并更新在
map
中的计数 - 第二个序列的数字也依次读入,同样更新在
map
中的计数
- 通过
-
输出结果:
遍历map
容器(它会按键自动排序),输出所有唯一的数字
-
-
代码的核心逻辑:
- 利用
map
的特性,自动去重并对数字按升序排序 - 每个数字的出现次数通过增加
map
中对应键的值来统计
- 利用
总结:
这段代码实现的功能是:接收两个数字序列,统计它们的所有不同数字,并按升序输出;由于使用了map
容器,它会自动去除重复数字并排序