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でgcc4.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 に答える