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

时间:2012-06-14 19:11:11

标签: 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;
}

这会产生此错误:

  

错误:与'(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。

1 个答案:

答案 0 :(得分:0)

以下编译并适用于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标准中采用,并且大多数已经在例如C ++ 11标准中实现。 Visual C ++和g ++。

因此,只需直接使用标准库。