0
class Map {
private:
    std::vector<std::string> key;
    std::vector<std::string> storage;
    int i;
public:
    Map();
    Map* set(std::string, std::string);
    std::string get(std::string);
};

Map::Map() {}
Map* Map::set(std::string k, std::string v) {
    key.push_back(k);
    storage.push_back(v);
    i++;
    return (this);
}
std::string Map::get(std::string k) {
    for (int k = 0; k < i; i++)
        if (key[i] == k)
            return storage[i];
}

今回はまだC++とクラスで遊んでいます。私はまだ地図とベクトルを「研究」していません。ただいくつかのドキュメントを読んでください。このクラスは、物事を試す以外の目的はありません。そのため、はい、ここで達成しようとしていることと同様のことがすでに存在していることを知っています。

なぜ、このコードをコンパイルすると、私は次のようになります:

main.cpp:32:エラー:'((Map *)this)-> Map::keyの'operator=='に一致しません。std :: vector <_Tp、_Alloc> :: operator [] [with _Tp = std :: basic_string、std :: allocator>、_Alloc = std :: allocator、std :: allocator >>](((long unsigned int) ((Map *)this)-> Map :: i))== k '

つまり、実際には==演算子がベクトルに存在しないということですか?

4

3 に答える 3

5

文字列値をと比較していstd::vector<string> keyますint。これは不可能です。

(ちなみに、amapは通常、ソートされた二分木として実装されます)

于 2012-07-26T09:27:37.180 に答える
5

その理由はシャドウイングです。intkはパラメータstd::string kをシャドウするため、コンパイラはstring == intを認識し、そのようなコンパレータはありません。

于 2012-07-26T09:31:38.863 に答える
3

-loopで、名前とタイプforを使用してloop-counterを宣言します。これにより、タイプのパラメーターの名前が非表示になります。kintstd::string

于 2012-07-26T09:29:47.337 に答える