Itération sur le vecteur de la paire
J'ai écrit extrait de code suivant mais il ne semble pas fonctionner.
int main(){
int VCount, v1, v2;
pair<float, pair<int,int> > edge;
vector< pair<float, pair<int,int> > > edges;
float w;
cin >> VCount;
while( cin >> v1 ){
cin >> v2 >> w;
edge.first = w;
edge.second.first = v1;
edge.second.second = v2;
edges.push_back(edge);
}
sort(edges.begin(), edges.end());
for ( vector < pair<float,pair<int,int>> >::const_iterator it = edges.begin() ; itt != edges.end; it++){
cout >> it.first;
}
return 0;
}
C'est de lancer une erreur à la ligne contenant la boucle for. L'erreur est:
error: no match for ‘operator<’ in ‘it < edges.std::vector<_Tp, _Alloc>::end [with _Tp = std::pair<float, std::pair<int, int> >, _Alloc = std::allocator<std::pair<float, std::pair<int, int> > >, std::vector<_Tp, _Alloc>::const_iterator = __gnu_cxx::__normal_iterator<const std::pair<float, std::pair<int, int> >*, std::vector<std::pair<float, std::pair<int, int> > > >, typename std::_Vector_base<_Tp, _Alloc>::_Tp_alloc_type::const_pointer = const std::pair<float, std::pair<int, int> >*]
Quelqu'un peut-il m'aider?
ne pourrait-il pas être
Un autre sauvage punt ne fonctionnera pas si vous ajouter un espace entre les chevrons dans votre boucle for:
support à angle droit problème a été résolu depuis C++11
Dépend du compilateur c'est pourquoi il est un sauvage punt
non, chaque C++11 compilateur doit gérer correctement
it != edges.end()
? Je ne vois pas itt
déclaré n'importe oùUn autre sauvage punt ne fonctionnera pas si vous ajouter un espace entre les chevrons dans votre boucle for:
vector < pair<float,pair<int,int> > >::const_iterator
?support à angle droit problème a été résolu depuis C++11
Dépend du compilateur c'est pourquoi il est un sauvage punt
non, chaque C++11 compilateur doit gérer correctement
>>
OriginalL'auteur Peeyush | 2014-09-01
Vous devez vous connecter pour publier un commentaire.
Il y a au moins trois erreurs dans la boucle.
Tout d'abord, vous devez utiliser
edges.end()
au lieu deedges.end
. Et à l'intérieur du corps, il y aau lieu de
Pour échapper à de telles erreurs, vous pouvez écrire simplement
->
et quand utiliser.
. Pourriez-vous s'il vous plaît aider?les itérateurs comme les pointeurs les pointeurs sont également certains types d'itérateurs). Lorsque par exemple vous avez un pointeur vers un objet de std::pair alors vous utilisez p->tout d'abord, p->second. De la même façon les itérateurs sont utilisés.
Ou tout simplement
for ( const auto& edge : edges )
OriginalL'auteur Vlad from Moscow
Aussi, vous pourriez vouloir ajouter un comparateur pour
std::sort
Soit utiliser une lambda ou un foncteur en tant que troisième paramètre pour
std::sort
, où vous pouvez choisir d'effectuer un tri sur la paire souhaitée de l'élément. Recherche sur DONC, il y a plusieurs exemples. Si vraiment perdu poser une nouvelle questionOriginalL'auteur P0W