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

时间:2012-07-26 09:25:57

标签: 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];
}

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

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

  

main.cpp:32:错误:不匹配'运营商=='   “((地图*)本) - &GT;地图::关键。 std :: vector&lt; _Tp,_Alloc&gt; :: operator [] [with   _Tp = std :: basic_string,std :: allocator&gt;,_ Alloc =   的std ::分配器,   std :: allocator&gt; &gt;](((long unsigned int)((Map *)this) - &gt; Map :: i))   == k'

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

3 个答案:

答案 0 :(得分:5)

您正在将std::vector<string> key中的字符串值与int进行比较。这是不可能的。

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

答案 1 :(得分:5)

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

答案 2 :(得分:3)

for - 循环中,您使用名称k声明循环计数器并输入int,这会隐藏std::string类型参数的名称。< / p>