私は、 '、'を押すまで入力を読み取るプログラムを作成しました-入力でCOMA。次に、入力した文字の数を数えます。
このマップを繰り返し処理したいのですが、it
はタイプなしでは定義できないと表示されています。
#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;
}
auto
を使用しているため、 C++ 11 コードがあります。 C++ 11準拠のコンパイラー(GCC 4.8.2以降など)が必要です。 Peter G。 がコメントしているので、変数にmap
(std::map
)という名前を付けないでください。 mymap
では、どうぞ
#include <unordered_map>
(tr1
は必要ありません!)
次に、g++ -std=c++11 -Wall -g yoursource.cc -o yourprog
を使用してコンパイルし、 範囲ベースのforループ をコーディングします
for (auto it : mymap)
std::cout << " " << it.first << ":" << it.second << std::endl;
C++ 17では、以下のコードのように、より短くてよりスマートなバージョンを使用できます。
unordered_map<string, string> map;
map["hello"] = "world";
map["black"] = "mesa";
map["umbrella"] = "corporation";
for (const auto & [ key, value ] : map) {
cout << key << ": " << value << endl;
}
auto
(およびその他のC++ 11機能)を使用する場合は、-std=c++11
をコンパイラフラグ(gcc/icc/clangを使用)に追加します。ところで、unordered_map
はC++ 11のstd
にあります... std::isalpha
もあります...
DorinLazărの回答に基づくと、別の可能な解決策は次のとおりです。
unordered_map<string, string> my_map;
my_map["asd"] = "123";
my_map["asdasd"] = "123123";
my_map["aaa"] = "bbb";
for (const auto &element : my_map) {
cout << element.first << ": " << element.second << endl;
}