我的 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
的标准,但之前很长一段时间它已经在许多编译器中作为扩展实现了。
问题是 emplace
和 move
语义是相对较新的概念。它也针对 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/