用c加加stl算法实现某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5∗10^9)。已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。
时间: 2024-02-22 17:55:32 浏览: 57
这个问题可以使用C++ STL中的map容器来解决。具体做法如下:
1. 定义一个map<int, int>类型的变量count_map来存储每个自然数的出现次数,其中map的key表示自然数,value表示出现次数。
2. 读入n个自然数,对于每个自然数num,通过count_map[num]++来增加它的出现次数。
3. 遍历count_map,按照自然数从小到大的顺序输出统计结果。
下面是代码实现:
```c++
#include <iostream>
#include <map>
using namespace std;
int main() {
int n;
map<int, int> count_map;
cin >> n;
for (int i = 0; i < n; ++i) {
int num;
cin >> num;
count_map[num]++;
}
for (map<int, int>::iterator it = count_map.begin(); it != count_map.end(); ++it) {
cout << it->first << " " << it->second << endl;
}
return 0;
}
```
这个算法的时间复杂度为O(nlogn),其中logn来自于map的插入和查找操作的时间复杂度。可以通过unordered_map来优化为O(n)的时间复杂度,但是由于数据范围较小,使用map已经足够快速和可靠。
阅读全文