15

据我所知,我所做的一切都是正确的,并且我收到了错误消息:

error: 'unordered_map' does not name a type
error: 'mymap' does not name a type

在我的代码中,我有:

#include <unordered_map>

using namespace std;

//global variable
unordered_map<string,int> mymap;
mymap.reserve(7000);

void main {
  return;
}

我看不出这里可能缺少什么......

编辑:当我将我的声明更新为

std::tr1::unordered_map<string,int> mymap;

我能够消除第一个错误,但是当我尝试保留时,我仍然收到第二个错误消息。

EDIT2:如下所述,reserve 必须进入 main 并且我需要用 flag 编译

-std=c++0x

但是,似乎仍然存在与 unordered_map 相关的错误,即:

error: 'class std::tr1::unordered_map<std::basic_string<char>, int>' has no member named 'reserve'
4

3 回答 3

21

编译g++ -std=c++11(我的 gcc 版本是gcc 4.7.2)和

#include <unordered_map>
#include <string>

using namespace std;

//global variable
unordered_map<string,int> mymap;

int main() {
  mymap.reserve(7000); // <-- try putting it here
  return 0;
}
于 2013-03-31T19:02:28.840 回答
5

如果您想支持<unordered_map>早于 c++11 的版本
#include<tr1/unordered_map>,请使用以下形式声明您的地图:-std::tr1::unordered_map<type1, type2> mymap
这将使用技术报告 1 扩展来实现向后兼容性。

于 2018-01-05T09:49:02.913 回答
3

你不能execute arbitrary expressions at global scope,所以你应该把

mymap.reserve(7000);

里面主要。

这也适用于其他 STL 容器,例如 map 和 vector。

于 2013-03-31T19:06:38.490 回答