您好我目前遇到了一个家庭作业问题,因为我不知道如何解决这个问题。
将读取整数列表的程序写入具有基类型的数组中 INT。提供设施以从键盘读取此数组或 从文件中,根据用户的选择。如果用户选择文件输入,则为程序 应该请求文件名。您可以假设少于50个 数组中的条目。您的程序确定有多少条目。 输出是两列列表。第一列是不同的列表 数组元素;第二列是数量的计数 每个元素的出现。列表应按照中的条目排序 第一列,从最大到最小。
所以我要输入:1,2,1,10,15,12,2,10,10 该程序应输出如下内容:
列出频率
1 ----- 2
2 ----- 2
10 ---- 3
15 ---- 1
我可以对数字进行排序,但不知道如何比较数组中的数字。
hr@abc.com
答案 0 :(得分:2)
除了@ stryku的回答,因为你只想打印频率,你甚至不需要创建v
向量:
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
#include <map>
int main() {
std::map<int, size_t> counts;
std::for_each(std::istream_iterator<int>(std::cin), std::istream_iterator<int>(), [&counts](int k) {
++counts[k];
});
for(const auto &pair : counts)
std::cout<<pair.first <<" "<< pair.second<<"\n";
return 0;
}
答案 1 :(得分:1)
你走了(:
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
#include <map>
int main() {
std::vector<int> v;
std::map<int, size_t> counts;
std::copy(std::istream_iterator<int>(std::cin),
std::istream_iterator<int>(),
std::back_inserter(v));
for(const auto &number : v)
++counts[number];
for(const auto &pair : counts)
std::cout<<pair.first <<" "<< pair.second<<"\n";
return 0;
}
如果您向他解释,我认为您的老师会感到惊讶