我不确定我是否完全理解哈希表/无序映射。当我执行以下操作时,代码会编译并正常工作:
#include <tr1/unordered_map>
int main() {
tr1::unordered_map<string, int> base;
string string1;
int integer1;
base["A"] = 0;
string1 = "A";
integer1 = base[string1];
cout << integer1 << endl;
return 0;
}
但这不能编译:
#include <tr1/unordered_map>
int main() {
tr1::unordered_map<int, char> base;
char char1;
int integer1;
base[1] = 'A';
integer1 = 1;
char1 = base[integer1];
cout << char1 << endl;
return 0;
}
这会产生这个错误:
error: no match for call to
'(std::tr1::unordered_map<int, char, std::tr1::hash<int>, s std::equal_to<int>, std::allocator<std::pair<const int, char> >, false>) (int*)'
谁能给我解释一下这个问题?我不认为我理解 unordered_map 是如何工作的。我正在 Apple 上使用 gcc 4.2.1 进行编译。
最佳答案
以下代码在 Visual C++ 10.0 和 MinGW g++ 4.6.1 上编译并工作良好:
#include <iostream>
#include <unordered_map>
int main()
{
using std::unordered_map;
using std::cout; using std::endl;
unordered_map<int, char> base;
char char1;
int integer1;
base[1] = 'A';
integer1 = 1;
char1 = base[integer1];
cout << char1 << endl;
return 0;
}
TR 是“技术报告”的缩写。 TR1 是第一份技术报告,包含对标准库的扩展。这些扩展已经被 C++11 标准采用,并且大多数已经在例如Visual C++ 和 g++。
所以,直接使用标准库就可以了。
关于c++ - 在 C++ 中使用无序 _map 将整数转换为字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11039795/