-1

给定一个非空的数字数组。显示此数组中最常见的数量。

#include <iostream>
    #include <map>
    #include <algorithm>
    #include <clocale>
    #include <iterator>

    int main()
    {
        setlocale(LC_ALL, "");
        const int size = 5;
        int array[size];
        for (int i = 0; i < size; i++)
            std::cin >> array[i];
        std::map<int, int> map;
        for (int i = 0; i < size; i++)
            map[array[i]] = std::count(std::begin(array), std::end(array), array[i]);
        std::cout<< "The most common element: " << map.begin()->first << std::endl;
        std::sort(std::begin(array), std::end(array));
        std::cout << "Sorting array: \n";
        std::copy(std::begin(array), std::end(array), std::ostream_iterator<int>(std::cout, " "));
        std::cout<< std::endl;

    }

如果是二维数组,我可以重写这样的程序吗?我该怎么办?

4

1 回答 1

0

您的原始程序不起作用,它只打印输入中的最小数字,因为 std::map 按键排序,您array[i]用作地图的键,您只需打印.first第一个元素(.begin())的键()地图。

要将代码转换为二维,请使用 astd::pair<int,int>作为键而不是单个 int。所以你的地图会变成:

std::map<std::pair<int,int>,int> map;

在您的原始代码中,您为每个元素调用 std::count 。这不是必需的,您可以简单地增加该特定值的 map-element 。假设您有一个二维值数组,请使用以下公式计算每个值出现的次数:

int array[SIZE][2];
...
for (i=...) {
    ++map[std::make_pair(array[i][0],array[i][1])];
}

然后,您可以使用std::max_element比较函数来比较second容器元素的元素(计数)以找到最常见的元素。需要一个特殊的比较函数,因为value_typeastd::mapstd::pair<K,V>whereK并且V分别是 Key 和 Value。

于 2013-03-24T22:35:34.297 回答