运算符==在std :: vector中不存在?

Sho*_*hoe 0 c++ vector operators

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];
}
Run Code Online (Sandbox Code Playgroud)

这次我还在玩C++和课程.我还没有"研究过"地图和矢量,只是阅读了一些文档.这个课程没有任何意义,只能尝试一下,所以:是的,我知道类似于我想要实现的东西已经存在.

为什么,编译这段代码,我得到:

main.cpp:32:错误:'((Map*)this)中的'operator =='不匹配 - > Map :: key.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'

我的意思是,真的是这个==运算符在向量中不存在吗?

Man*_*Way 5

你在比较一个字符串值std::vector<string> keyint.这是不可能的.

(在旁注中,a map通常实现为已排序的二叉树)


nur*_*tin 5

原因是影子.你的int k阴影你的参数std :: string k,所以编译器看到string == int并且没有这样的比较器.