-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;

    }

2次元配列の場合、そのようなプログラムを書き直すことはできますか? そして、どうすればそれができますか?

4

1 に答える 1

0

元のプログラムは機能しません。 std::map はキーでソートされ、マップのキーとして使用され、最初の element( )array[i]の key( ) を単純に出力するため、入力の最小値を出力するだけです。地図。.first.begin()

コードを 2 次元に変換するstd::pair<int,int>には、単一の int の代わりに a をキーとして使用します。したがって、マップは次のようになります。

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

元のコードでは、すべての要素に対して std::count を呼び出しています。これは必須ではありません。その特定の値の map-element を単純に増やすことができます。値の 2 次元配列があると仮定すると、次を使用して各値が発生する回数をカウントします。

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

std::max_element次に、コンテナ要素の要素 (カウント) を比較する比較関数を使用しsecondて、最も一般的な要素を見つけることができます。a のはwhere であり、それぞれ Key と Valueでvalue_typeあるため、特別な比較関数が必要です。std::mapstd::pair<K,V>KV

于 2013-03-24T22:35:34.297 に答える