计算数组中元素的频率

时间:2016-07-23 07:49:05

标签: c++ arrays sorting

您好我目前遇到了一个家庭作业问题,因为我不知道如何解决这个问题。

将读取整数列表的程序写入具有基类型的数组中 INT。提供设施以从键盘读取此数组或 从文件中,根据用户的选择。如果用户选择文件输入,则为程序 应该请求文件名。您可以假设少于50个 数组中的条目。您的程序确定有多少条目。 输出是两列列表。第一列是不同的列表 数组元素;第二列是数量的计数 每个元素的出现。列表应按照中的条目排序 第一列,从最大到最小。

所以我要输入:1,2,1,10,15,12,2,10,10 该程序应输出如下内容:

列出频率

1 ----- 2

2 ----- 2

10 ---- 3

15 ---- 1

我可以对数字进行排序,但不知道如何比较数组中的数字。

hr@abc.com

2 个答案:

答案 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;
}

如果您向他解释,我认为您的老师会感到惊讶