为什么这个哈希表函数显示编译错误?
Why does this hashtable function show a compilation error?
#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函数?
只是一个编译器错误 - 您使用的编译器对 C++11 的支持不完整。例如,gcc 直到 4.8.0. Your code is perfectly fine, and it compiles on a later version 才支持 emplace()
。
您的选择只是在没有 emplace()
的情况下凑合,或者升级您的编译器。
#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函数?
只是一个编译器错误 - 您使用的编译器对 C++11 的支持不完整。例如,gcc 直到 4.8.0. Your code is perfectly fine, and it compiles on a later version 才支持 emplace()
。
您的选择只是在没有 emplace()
的情况下凑合,或者升级您的编译器。