2010-03-02 138 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