【问题标题】:Operator == doesn't exists in std::vector?运算符 == 在 std::vector 中不存在?
【发布时间】:2012-07-26 09:25:56
【问题描述】:
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: 错误: 'operator==' 不匹配 '((Map*)this)->Map::key. std::vector<_tp _alloc>::operator[] [with _Tp = std::basic_string, std::allocator >, _Alloc = 标准::分配器, std::allocator > >](((long unsigned int)((Map*)this)->Map::i)) == k'

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

【问题讨论】:

  • 你的迭代错了,不是key[i] == k输出错误。

标签: c++ vector operators


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    (顺便说一句,map 通常实现为有序二叉树)

    【讨论】:

    • 一般情况下,比较intstring是不可能的,但是你可以这样比较:string.lengthint或者itoa(int)string或者...: )
    • @loldop 是的,我知道,但我调用 std::string 方法参数的方式与 for 循环中的迭代器整数相同。 k 我指的是这个论点,太糟糕了 C++ 不这么认为。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-29
      • 2021-08-16
      • 2018-12-16
      • 2014-11-04
      • 1970-01-01
      • 2011-06-25
      • 2022-10-18
      相关资源
      最近更新 更多