2010-03-02 185 views
1

我不知道以下代碼有什麼問題,它應該讀取數字並將它們的值將這些位置放在一對矢量中,然後對它們進行排序並打印出位置。我排除了部分 - 我認爲問題在那裏,但我再次收到編譯錯誤。調用'(std :: pair <unsigned int,unsigned int>)(unsigned int&,unsigned int)'

#include <iostream>                           
#include <vector>                            
#include <algorithm>                           
#include <utility>                            
using namespace std;                           

int main(void) 
{ 
     unsigned int n,d,a[65],b[65],s,i,j,t,us=0; 
     pair<unsigned int,unsigned int> temp; 
     vector< pair<unsigned int,unsigned int> > v; 
     cin >> n; 
     for(i=0;i<n;i++) 
     { 
       cin >> t; 
       temp(t, i+1); 
       v.push_back(temp); 
     } 
     cin >> d; 
     for(i=0;i<d;i++) cin >> a[i] >> b[i]; 
     for(i=0;i<v.size();i++) 
     { 
       cout << v[i].first << " -- " << v[i].second << endl; 
     } 
     return 0; 
} 

請告訴我問題在哪裏。謝謝。

+0

錯誤消息中的行號非常重要且有用。 – Bill 2010-03-02 15:41:36

回答

2

問題是temp(t, i+1);

您需要設置環路(大概是什麼我會做)裏面的第一和第二手動

temp.first = t; 
temp.second = i + 1; 

或者你可以聲明溫度。

for(i=0;i<n;i++) 
{ 
    cin >> t; 
    pair<unsigned int,unsigned int> temp(t, i+1); 
    v.push_back(temp); 
} 

或第二備用,使用make_pair輔助功能,並帶有溫度完全廢除(感謝KennyTM的提醒)

for(i=0;i<n;i++) 
{ 
    cin >> t; 
    v.push_back(make_pair(t, i+1)); 
} 

希望這有助於

+2

或使用'make_pair'。 – kennytm 2010-03-02 13:27:12

+0

謝謝 - 問題解決了! – VaioIsBorn 2010-03-02 13:28:17

+0

或構造循環對中的變量 temp(t,i + 1); – Mark 2010-03-02 13:29:23

2

它通常是不好的形式在循環之外創建一個變量,並在循環中重複使用它多次,如果唯一使用它的地方在循環中。只有在建設成本高,重新分配比重新創建成本更低的情況下才能做到這一點。一般而言,C++變量應該在它們使用的範圍內聲明,以便更容易閱讀程序的每個部分,並且能夠在以後重新分解它。

對於您的情況,我會完全刪除對temp的引用,並將push_back調用更改爲v.push_back(make_pair(t, i+1))

+0

+1,提供良好的範圍建議。 – 2010-03-02 13:34:08