2013-03-21 105 views
-1

給定一個非空的數字數組。顯示該數組中最常見的數字。在C++中使用stl使用矩陣

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

    } 

我可以在二維數組的情況下重寫這樣的程序嗎? 我該怎麼辦?

+0

我無法使用地圖對顯示的矩陣進行排序和打印。 – 2013-03-21 17:56:36

+0

你**有**在這裏使用'map'嗎? – vlad 2013-03-21 18:12:07

+1

你的問題似乎非常相似http://stackoverflow.com/questions/1367429/sorting-a-stdmap-by-value-before-output-destroy看看有沒有答案 – erikced 2013-03-21 18:13:58

回答

0

您的原始程序不能正常工作,它只是打印你輸入的最低數量,因爲的std ::地圖各種各樣的關鍵,您使用array[i]作爲您的映射鍵,你只需打印的按鍵(.first)地圖中的第一個元素(.begin())。

要將代碼轉換爲2維,請使用std::pair<int,int>作爲您的鍵而不是單個int。因此,您的地圖將變爲:

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

在您的原始代碼中,您將爲每個元素調用std :: count。這不是必須的,您可以簡單地爲該特定值增加map元素。假設你已經值的二維陣列,使用以下方法來計算每個值多少次發生:

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

然後可以使用std::max_element與進行比較的所述second元件(計數)一個比較功能容器元素來查找最常見的元素。需要特殊的比較功能,因爲std::mapvalue_typestd::pair<K,V>,其中KV分別是Key和Value。