Itérer non ordonnée de la carte C++
J'ai écrit programme qui lit l'entrée jusqu'à ce que vous frappez ',' - COMA à l'entrée. Ensuite, il compte le nombre de lettres que vous mettez dans,
Je veux itérer sur cette carte, mais il est dit que it
ne peut pas être définie avec aucun type:
#include <iostream>
#include <conio.h>
#include <ctype.h>
#include <iostream>
#include <string>
#include <tr1/unordered_map>
using namespace std;
int main(){
cout<<"Type '.' when finished typing keys: "<<endl;
char ch;
int n = 128;
std::tr1::unordered_map <char, int> map;
do{
ch = _getch();
cout<<ch;
if(ch >= 'a' && ch <= 'z' || ch >= 'A' && ch <= 'Z'){
map[ch] = map[ch] + 1;
}
} while( ch != '.' );
cout<<endl;
for ( auto it = map.begin(); it != map.end(); ++it ) //ERROR HERE
std::cout << " " << it->first << ":" << it->second;
return 0;
}
avez-vous compilez avec
Aussi, s'il vous plaît éviter la confusion et ne pas le nom de vos objets comme des types STL, par exemple, renommer
-std=c++11
? auto
est un C++11 fonctionnalité.Aussi, s'il vous plaît éviter la confusion et ne pas le nom de vos objets comme des types STL, par exemple, renommer
map
à aMap
.OriginalL'auteur Yoda | 2014-04-05
Vous devez vous connecter pour publier un commentaire.
Vous utilisez
auto
si vous avez C++11 code. Vous avez besoin d'un C++11 compatible compilateur (par exemple GCC 4.8.2 ou plus récent).Comme Peter G. commenté, ne pas le nom de votre variable
map
(qui eststd::map
) mais par exemplemymap
Merci donc de
(pas besoin de
tr1
!)Compiler avec
g++ -std=c++11 -Wall -g yoursource.cc -o yourprog
et code un basé sur la plage pour la bouclec'est
it.first
etit.second
depuis l'itérateur est automatiquement déréférencé pour vousSi vous ne voulez pas copier les valeurs, utilisez
auto& it
.OriginalL'auteur Basile Starynkevitch
Avec C++17 vous pouvez utiliser une plus courte, la plus intelligente, la version, comme dans le code ci-dessous:
OriginalL'auteur Dorin Lazăr
Ajouter
-std=c++11
à vos drapeaux du compilateur (gcc/cpi/clang) si vous souhaitez utiliserauto
(et autres C++11 caractéristiques). Btw,unordered_map
est dansstd
en C++11 ... il y a Aussistd::isalpha
...OriginalL'auteur Walter
Basé sur Dorin Lazăr réponse, une autre solution possible est:
map
noms demy_map
.Désolé, la fixation de maintenant.
OriginalL'auteur Erik Campobadal