c++ - 在 C++ 中使用无序 _map 将整数转换为字符

标签 c++

我不确定我是否完全理解哈希表/无序映射。当我执行以下操作时,代码会编译并正常工作:

#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/

相关文章:

c++ - 移动而不是复制 boost::dynamic_bitset BlockInputIterator 构造函数?

c++ - 多集删除最后一个元素

c++ - 这种回调的使用是惯用的吗?

c++ - 为什么我们需要需要?

c++ - C++ 构造函数的异常说明符

c++ - 尝试生成随机变量时获取 "-nan(ind)"

c++ - eclipse中的交叉编译器前缀和路径

c++ - 从 Eclipse IDE 运行 C 程序时如何为其指定命令行参数

c++ - MSVC9.0 bug 或对虚拟继承的误解和 friend ?

c++ - 光标位置 c++ GetCursorPos 方法