3

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

#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 进行编译。

4

1 回答 1

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 标准中采用,并且大部分已经在例如 Visual C++ 和 g++ 中实现。

所以,直接使用标准库即可。

于 2012-06-14T19:21:35.310 回答