2010-03-02 4 views
1

Я не знаю, что не так с кодеком follwing, он должен читать числа и ставить их значение с позицией вместе в векторе пар, а затем сортировать их и распечатывать позиции. Я удалил часть с сортировкой - я думал, что проблема была там, но я снова получил ошибку при компиляции.Нет совпадений для вызова в '(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

ответ

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

+0

Спасибо - проблема решена! – VaioIsBorn

+0

или построить переменную в паре цикла temp (t, i + 1); – Mark

2

Это вообще плохая форма создать переменную за пределами цикла и повторно использовать ее много раз в цикле, если единственное место, которое вы используете, находится в этом цикле. Делайте это только в том случае, если стоимость строительства высока, и дешевле переустанавливать, чем воссоздавать. Обычно переменные C++ должны быть объявлены в области, в которой они используются, чтобы облегчить чтение каждой части программы и возможность ее повторного использования позже.

В вашем случае я полностью удалю ссылку на temp и измените вызов push_back на v.push_back(make_pair(t, i+1)).

+0

+1 для хорошего совета. –