2011-12-10 78 views
1
#include<iostream> 
#include<string.h> 
#include<algorithm> 
using namespace std; 

pair<char[300],int> list[10000]; 

int main() 
{ 
    char a[300],b[20000]; 
    int n; 
    cin >> n; 
    for(int d=1; d<=n; d++) 
    { 
     list[d].second = 0; 
    } 
    int k=0; 
    for(int d=1; d<=n; d++) 
    { 
     cin >> a; 
     bool masuk=false; 
     for(int e=1; e<=k;e++) 
     { 
      if (strcmp (a,list[e].first) == 0) 
      { 
       masuk = true; 
       list[e].second++; 
       break; 
      } 
     } 
     if (!(masuk)) 
     { 
      k++; 
      strcpy(list[k].first,a); 
      list[k].second++; 
     } 
     cin.getline(b,256); 
    } 
    sort(list+1,list+k+1); 
    for(int e =1; e<=k; e++) 
    { 
     cout << list[e].first << " " << list[e].second << endl; 
    } 
} 

,如果我輸入排序對工作不

3 
Spain Donna Elvira 
England Jane Doe 
Spain Donna Anna 

我希望它輸出

England 1 
Spain 2 

但它輸出

Spain 2 
England 1 

不是那種想進行排序首先?但似乎並不奏效。我試過這個Dev C++,它輸出正確,但是當它嘗試這個對ideone它輸出錯誤

請幫助我,對不起我的英語不好。

+2

順便說一句,DevC++是一個過時的廢話。我建議你切換到更好的IDE,比如Code :: Blocks。 –

+0

好的,但仍然不能回答我的問題。我如何使用排序對? – zeulb

+0

@EtiennedeMartel看起來好像有一些人正試圖復活它......奇怪得足夠:http://en.wikipedia.org/wiki/Dev-C%2B%2B還要注意Eclipse CDT(http:// eclipse。 org/cdt /)是一個功能強大的C++環境。 –

回答

3

有幾件事情在這裏,打我:你爲什麼要使用std ::對的陣列來模擬一個std ::地圖的行爲

  1. 爲什麼你開始索引1而不是0?

無論如何,std :: sort需要第三個參數,正如Max Lybbert已經提到的那樣。該參數是一個指向排序函數的指針。這一個適用於你的情況:

bool mysort(std::pair<const char*, int> a, std::pair<const char*,int> b) { 
    return (strcmp(a.first, b.first) < 0); 
} 
+0

謝謝你這個作品:D我也試過字符串,它也可以工作 – zeulb

+0

我還沒有學習地圖,所以我不能使用它 – zeulb

2

我很驚訝你沒有收到編譯器錯誤。 std::sort不知道如何比較數組中的元素。您需要將該信息作爲std::sort的第三個參數傳遞(作爲函數的指針或作爲函子)。

+1

回覆:*「std :: sort不知道如何比較數組中的元素」* - 確實如此,儘管它可能不是你想要的。它比較了第一個元素,它是一個數組(它導致了一個指針比較),如果需要的話,後跟一個int比較。 –