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> keyint. 这是不可能的。

(附带说明, amap通常实现为排序二叉树)

于 2012-07-26T09:27:37.180 回答
5

原因是阴影。您的 int k 会影响您的参数 std::string k,因此编译器会看到 string == int 并且没有这样的比较器。

于 2012-07-26T09:31:38.863 回答
3

在您的-loop 中,您使用 name和 typefor声明循环计数器,它隐藏了 type 参数的名称。kintstd::string

于 2012-07-26T09:29:47.337 回答