2011-09-09 40 views
4

g ++中内置unordered_map概念是什么时候?GCC中的unordered_map错误

因为以下代码会引发错误。

#include<iostream> 
#include<unordered_map> 
#include<stdio.h> 

using namespace std; 

std::unordered_map<std::int,int> mirror; 

mirror['A'] = 'A'; 
mirror['B'] = '#'; 
mirror['E'] = 3; 

int main(void) 
{ 
    std::cout<<mirror['A']; 
    std::cout<<mirror['B']; 
    std::cout<<mirror['C']; 
    return 0; 
} 

我编译的代码如下:

g++ -c hashexample.cpp 
g++ -o result hashExample.o 
./result 

我得到的错误是这样的:

inavalid类型int [字符[为aaray标

这是什么修复?

+0

除了下面提供的解决方案,您可以考虑将您的模板从更改为,因为您仅使用字符来提供密钥。只是一个观察/建议! –

+0

甚至不应该编译,因为'std :: int',这是无效的C++。 –

+1

至少13年前,'stdio.h'在C++中已被弃用,为什么你不缩进你的代码? –

回答

5

问题是你的任务。你不能在这个地方给你的地图赋值。 C++不是脚本语言。
这个程序能正常工作在我的机器上用gcc4.6:

#include<iostream> 
#include<unordered_map> 

std::unordered_map<int,int> mirror; 

int main() { 
    mirror['A'] = 'A'; 
    mirror['B'] = '#'; 
    mirror['E'] = 3; 

    std::cout<<mirror['A']; 
    std::cout<<mirror['B']; 
    std::cout<<mirror['C']; 
} 
+0

你可以这样做,“不在这个地方”! –

+1

@Tomalak:你说得对“在这个地方”比较好。 – mkaes

+0

是的,我也看到了。但我不能把它放在主要。 – 2012-12-08 07:56:53

5

首先,mkaes指出,你不能把任务之外的功能,所以你必须把它放在任何,例如main

至于unordered_map,近期版本的gcc,如果你不想进入C++ 11,可以使用的unordered_map的TR1版本:

#include <tr1/unordered_map> 

和类型std::tr1::unordered_map。你知道,C++ 11取代了所有这些,但是你(至少在GCC中)可以正常工作。