Durchlaufen ungeordnete map C++
Ich schrieb-Programm, das liest die Eingabe, bis Sie die Treffer ',' - KOMA am Eingang. Dann zählt es die Anzahl der Buchstaben, die Sie in setzen,
Möchte ich Durchlaufen diese Karte, aber es sagt, dass it
kann nicht definiert werden, wih Nein Typ:
#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;
}
hast du kompilieren mit
Sie bitte auch, Verwirrung zu vermeiden und nicht die Namen Ihrer Objekte, wie z.B. STL-Dateitypen, wie z.B. umbenennen
-std=c++11
? auto
ist ein C++11 feature.Sie bitte auch, Verwirrung zu vermeiden und nicht die Namen Ihrer Objekte, wie z.B. STL-Dateitypen, wie z.B. umbenennen
map
zu aMap
.InformationsquelleAutor Yoda | 2014-04-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie mit
auto
so haben Sie C++11 code. Benötigen Sie einen C++11-kompatiblen compiler (z.B. GCC 4.8.2 oder neuer).Als Peter G. kommentiert, nicht den Namen Ihrer Variablen
map
(das iststd::map
), aber z.B.mymap
Also bitte
(keine Notwendigkeit für
tr1
!)Dann kompilieren mit
g++ -std=c++11 -Wall -g yoursource.cc -o yourprog
und code ein range-basierte for-Schleifees ist
it.first
undit.second
da der iterator automatisch dereferenziert für SieWenn Sie nicht möchten, kopieren Sie Werte verwenden
auto& it
.InformationsquelleAutor Basile Starynkevitch
Mit C++17 können Sie eine kürzere und intelligentere version, wie in den folgenden code:
InformationsquelleAutor Dorin Lazăr
Hinzufügen
-std=c++11
zu Ihrem compiler-flags (mit gcc/icc/clang), wenn Sie verwenden möchtenauto
(und anderen C++11 features). Btw,unordered_map
ist instd
in C++11 ... Ebenfalls gibt esstd::isalpha
...InformationsquelleAutor Walter
Basierend auf Dorin Lazăr Antwort, eine weitere mögliche Lösung ist:
map
Namenmy_map
.Sorry, fixieren Sie es jetzt.
InformationsquelleAutor Erik Campobadal