2010-03-02 18 views
1

Je ne sais pas quel est le problème avec le code suivant, il devrait lire les chiffres et mettre leur valeur avec la position ensemble dans un vecteur de paires, puis les trier et imprimer les positions. J'ai supprimé la partie avec tri - je pensais que le problème était là, mais j'ai reçu une erreur sur la compilation à nouveau.Aucune correspondance pour l'appel à '(std :: paire <unsigned int, unsigned int>) (entier non signé &, 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; 
} 

Veuillez me dire où est le problème. Merci.

+0

Les numéros de ligne dans vos messages d'erreur sont importants et utiles. – Bill

Répondre

2

Le problème est temp(t, i+1);

Vous devez définir la première et la deuxième manuellement

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

Sinon, vous pouvez déclarer température dans la boucle (probablement ce que je ferais).

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

Ou un second autre, utilisez la fonction d'aide de make_pair, et en finir avec la température complètement (grâce à KennyTM pour le rappel)

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

Hope this helps

+2

Ou utilisez 'make_pair'. – kennytm

+0

Merci - problème résolu! – VaioIsBorn

+0

ou construisez la variable dans la paire de boucles temp (t, i + 1); – Mark

2

Il est généralement mauvaise forme pour créer une variable en dehors d'une boucle et réutiliser plusieurs fois dans la boucle, si le seul endroit où vous l'utilisez est dans cette boucle. Ne le faites que si le coût de construction est élevé et qu'il est moins coûteux de réattribuer que de recréer. En général, les variables C++ doivent être déclarées dans la portée qu'elles utilisent, afin de faciliter la lecture de chaque partie du programme et de pouvoir le factoriser plus tard.

Dans votre cas, je voudrais supprimer complètement la référence à temp et modifier l'appel push_back à v.push_back(make_pair(t, i+1)).

+0

+1 pour un bon conseil de portée. –