用STL迭代器知识解决下列问题: 给出若干个正整数,请找出出现次数最多的数。 输入格式: 在一行中输入若干个数,以空格间隔(读入数的总个数不超过5000)。 输出格式: 输出出现次数最多的数(若答案不唯一,输出最小的那个)。 输入样例: 在这里给出一组输入。例如: 18 999 999 2100000000 输出样例: 在这里给出相应的输出。例如: 999
时间: 2024-02-22 13:58:24 浏览: 138
输入若干个整数,统计出现次数最多的那个整数。如果出现最多的整数有两个以上,打印最早输入的那个整数。
可以用 `map` 来统计每个数出现的次数,然后再遍历一遍 `map` 找出出现次数最多的数即可。代码如下:
```cpp
#include <iostream>
#include <map>
using namespace std;
int main() {
map<int, int> mp;
int x;
while (cin >> x) {
mp[x]++;
}
int max_cnt = 0, ans = 0;
for (auto iter = mp.begin(); iter != mp.end(); ++iter) {
if (iter->second > max_cnt) {
max_cnt = iter->second;
ans = iter->first;
}
}
cout << ans << endl;
return 0;
}
```
如果要使用迭代器,可以将上述代码中的 `auto` 替换为 `map<int, int>::iterator`,如下所示:
```cpp
#include <iostream>
#include <map>
using namespace std;
int main() {
map<int, int> mp;
int x;
while (cin >> x) {
mp[x]++;
}
int max_cnt = 0, ans = 0;
for (map<int, int>::iterator iter = mp.begin(); iter != mp.end(); ++iter) {
if (iter->second > max_cnt) {
max_cnt = iter->second;
ans = iter->first;
}
}
cout << ans << endl;
return 0;
}
```
两份代码功能相同,只是使用的语法不同,都是用 STL 的 `map` 来实现的。
阅读全文