2017-06-16 1 views
-8

J'ai un tableau de vecteur de pairesComment imprimer des éléments de tableau de vecteurs de paires?

vector <pair<int,int> > a[4] 

.I ont ajouté des éléments à l'aide push_back.But Je ne sais pas comment imprimer le elements.if-je utiliser un iteretor et l'imprimer comme un [i] .deuxième ou un [i] .second il me jette l'erreur. Toutes les autres façons de le faire.Merci d'avance.

vector <pair<int,int> > a[4]; 
for(int i = 0;i < e;++i) 
{ 
    int x,y; 
    cin >> x >> y >> w; 
    a[x].push_back({w, y}); 
    a[y].push_back({w, x}); 
} 

C'est ainsi que je pousse des éléments.Mais comment les imprimer. Je reçois l'erreur suivante. Je ne sais pas comment les imprimer.

error: no match for 'operator[]' (operand types are 'std::vector<std::pair<int, int> >*' and 'std::vector<std::pair<int, int> >::iterator {aka __gnu_cxx::__normal_iterator<std::pair<int, int>*, std::vector<std::pair<int, int> > >}') 
    for(i=g[i].begin();i!=g[i].end();i++) 
+0

Bienvenue dans Stack Overflow. Veuillez prendre le temps de lire [The Tour] (http://stackoverflow.com/tour) et de consulter le contenu du [Centre d'aide] (http://stackoverflow.com/help/asking) quoi et comment vous pouvez demandez ici. –

+0

Pourquoi est-ce un sujet que je ne devrais pas demander ici ?? – piku

+0

Etes-vous sûr de vouloir avoir un tableau de 'vector >' ?? –

Répondre

2

Vous n'avez pas fournir un code afin que nous puissions être en mesure de savoir ce qui se passe mal à votre machine. Mais voici un exemple de travail sur l'accès à un vecteur de paires:

#include <utility> 
#include <iostream> 
#include <vector> 
#include <string> 

typedef std::pair<int, std::string> pairIntString; 
int main() 
{ 
    std::vector<pairIntString> pairVec; 

    pairVec.push_back(std::make_pair(1, "One")); 
    pairVec.push_back(std::make_pair(2, "Two")); 
    pairVec.push_back(std::make_pair(3, "Three")); 

    for (std::vector<pairIntString>::const_iterator iter = pairVec.begin(); 
     iter != pairVec.end(); 
     ++iter) 
    { 
     std::cout << "First: " << iter->first 
       << ", Second: " << iter->second <<std::endl; 
    } 
    return 0; 
} 

sortie, see here:

First: 1, Second: One 
First: 2, Second: Two 
First: 3, Second: Three 

Edit # 1:

Maintenant, vous fournissez le code, mais vous utilisez actuellement un tableau de vecteurs de paires: vector <pair<int,int> > a[4];. De plus, vous mettez un iterator de la méthode begin() dans le [] operator. Il semble que vous avez mélangé beaucoup de choses par ex. ici i=a[i].begin() (un i est l'itérateur et un autre est un index) et ne comprend pas ce qu'ils sont réellement. S'il vous plaît regardez mon exemple et lisez sur les tableaux et les vecteurs et comment y accéder correctement. Lire aussi sur la différence d'accès indexé et itérateur.

Edit # 2:

Cette boucle:

for(i=a[i].begin();i!=a[i].end();i++) 
{ 
    cout<<a[i].second<<" "; 
} 

devrait probablement:

/* loop through the fixed size array */ 
for(size_t idx = 0; idx < 4; ++i) 
{ 
    cout << "Array element idx: " << idx << endl; 
    /* get the iterator of the specific array element */ 
    for (vector <pair<int,int> >::const_iterator iter = a[idx].begin(); 
     iter != a[idx].end(); 
     ++iter) 
    { 
     cout << "First: " << iter->first 
      << ", Second: " << iter->second << endl; 
    } 
} 

comme vous ayant un réseau de vecteur de paires vous avez deux boucles sur le tableau et le vecteur. Parce que le tableau a une taille fixe de 4 je l'ai utilisé comme maximum.

+0

J'ai fait les changements dans mon post.Comment imprimer pour ce cas – piku

+0

Non je le veux.je dois l'utiliser pour la représentation de la liste d'adjacence. Pouvez-vous me dire comment imprimer des éléments – piku

+0

ya je suis nouveau à l'aide de stl en C++ .C'est pourquoi ces confusions. – piku

0
vector <pair<int,int>> vec[5]; 
vector <pair<int,int>> :: iterator it; 

for(int i=0;i<5;i++){ 
    for(it=vec[i].begin(); it!=vec[i].end();it++) cout << it->first << " " << it->second << " -> "; 
    cout << "\n"; 
}