c++ - g++ v 3.4.4-999 中的 unordered_map::emplace 错误

标签 c++ c++11 g++ unordered-map

我的 friend 向我介绍了哈希表,作为一种轻松将字符串与整数关联起来的方法,因此我尝试使用 std::unordered_map 在我当前的项目中实现它们。下面显示了代码示例(为了简洁起见,没有显示完整的函数,标题也没有显示;我相信问题不在那里):

unordered_map <string,int> world::gentypetable(){
    unordered_map <string,int> hashtable;
    hashtable.emplace("Normal",0);
    hashtable.emplace("Fire",1);
    hashtable.emplace("Water",2);
    hashtable.emplace("Electric",3);
    hashtable.emplace("Grass",4);

但是,当我尝试使用 g++ 3.4.4-999 编译此代码时,我收到以下错误:

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

我怀疑这是因为编译器已经过时了。是这个原因,还是还有其他原因?如果是由于编译器造成的,是否有替代语法可以用来避免将其更新到当前版本的漫长过程?

最佳答案

是的,这是过时的编译器的问题。然而问题并不在于 unordered_map ,它当时是作为自定义扩展实现的 ext/hash_map 。一些代码使用适当的定义来使名称保持一致。它刚刚正式成为 c++11 的标准,但之前很长一段时间它已经在许多编译器中作为扩展实现了。

问题是 emplacemove 语义是相对较新的概念。它也针对 c++11 进行了标准化,但只有大多数现代编译器支持它。

这就是为什么编译器可能识别并能够使用 HashMap ,但不知道方法本身。

您可能可以尝试将 emplace 替换为普通的 insert。它可能涉及创建不必要的临时文件,但它是向 STL 容器添加元素的相当传统的方法。

旁注:gcc 3.4.4 现在确实很旧,并且缺少一些关键的东西。与新版本相比,它在优化算法方面也相当逊色。要是能更新一下就好了。

关于c++ - g++ v 3.4.4-999 中的 unordered_map::emplace 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20122459/

相关文章:

GCC,-W1 是什么意思

c++ - 哪个库包含 regexec()、regfree()、regcomp()?

c++ - 尝试从另一个进程读取 32 位整数时,ReadProcessMemory 使应用程序崩溃

c++ - 在这种情况下是否可以避免复制 lambda 仿函数?

c++ - "auto;"类型推断

c++ - CRTP派生类貌似不知道继承类型

c++ - 为什么 C++11 'auto' 关键字对静态成员不起作用?

c++ - 如何更改makefile中g++的版本

c++ - 跨容器共享对象的最佳方式是什么?

dynamic - 删除 ldd 报告的未使用的库是否完全安全?