为什么这个哈希表函数显示编译错误?

时间:2015-05-30 20:10:38

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

#include <iostream>
#include <string>
#include <unordered_map>

using namespace std;

int main (void)
{
    unordered_map<string,string> myhash;
    int i,n,m,len1,len2;
    cin>>n>>m;
    string arr2[3010];
    string s1,s2;
    for ( i = 0; i < m; i++ )
    {
        cin>>s1>>s2;
        myhash.emplace(s1,s2);
    }
    for ( i = 0; i < n; i++ )
    {
        cin>>arr2[i];
    }
    for ( i = 0; i < n; i++ )
    {
        len1 = arr2[i].length();
        len2 = myhash[arr2[i]].length();
        if ( len1 > len2 )
            cout<<myhash[arr2[i]]<<"\t";
        else
            cout<<arr2[i]<<"\t";
    }
    cout<<"\n";
    return 0;
}

编译时,显示错误。

error: no member named 'emplace' in
      'std::__1::unordered_map<std::__1::basic_string<char>, std::__1::basic_string<char>,
      std::__1::hash<std::__1::basic_string<char> >,
      std::__1::equal_to<std::__1::basic_string<char> >, std::__1::allocator<std::__1::pair<const
      std::__1::basic_string<char>, std::__1::basic_string<char> > > >'
                myhash.emplace(s1,s2);

我制作了上面的代码,我在其中输入了许多字符串并将它们添加到名为myhash的哈希表中。 为什么我看到这个错误?是因为我的编译器不支持emplace函数吗?

1 个答案:

答案 0 :(得分:0)

只是一个编译器错误 - 你使用的编译器只是不完整的C ++ 11支持。例如,gcc在4.8.0之前不支持emplace()。你的代码非常好,它可以在later version gcc上编译。

您的选择只是在没有transform的情况下完成,或者升级您的编译器。