迭代unordered_map C ++

时间:2014-04-05 11:42:58

标签: c++ iterator unordered-map

我写了一个程序来读取输入,直到你点击,' - 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;
}

3 个答案:

答案 0 :(得分:23)

您正在使用auto,因此您拥有C++11代码。您需要符合C ++ 11的编译器(例如GCC 4.8.2或更高版本)。 在Peter G.发表评论时,请不要为变量mapstd::map)命名,例如mymap 所以请

#include <unordered_map>

(不需要tr1!)

然后使用g++ -std=c++11 -Wall -g yoursource.cc -o yourprog进行编译并编码range based for loop

for (auto it : mymap) 
    std::cout << " " << it.first << ":" << it.second << std::endl;

答案 1 :(得分:4)

如果要使用-std=c++11(以及其他C ++ 11功能),请将auto添加到编译器标志(使用gcc / icc / clang)。顺便说一下,unordered_map在C ++ 11中std ...还有std::isalpha ...

答案 2 :(得分:1)

基于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;
}