【问题标题】:No operator "==" maches these operands没有运算符“==”可以处理这些操作数
【发布时间】:2018-05-14 09:15:16
【问题描述】:

所以我尝试将我从 it->second 获得的迭代器值与 int 进行比较,以在值的基础上从 map 中获取键。我有这个代码:

std::map<string, std::vector<int> >::const_iterator it;
void getStudentByGrade(int gradeComp)
{
    for (it = studMap.begin(); it != studMap.end(); it++)
    {
        if (it->second == gradeComp)
        {
            cout << it->first;
        }
    }
}

在 if 语句中我得到了错误,但我比较了两个整数,不是吗?作为gradeComp 和it->second 传递的int。

错误是:

严重性代码描述项目文件行抑制状态 错误 C2678 二进制“==”:未找到采用左手的运算符 'const std::vector>' 类型的操作数(或那里 是不可接受的转换)

如何解决错误?我发现了仅使用迭代器获取键值的示例。

【问题讨论】:

  • it-&gt;second 是一个std::vector&lt;int&gt;, innit。
  • 添加到第一条评论,您可能想要更改std::map&lt;string, int&gt;

标签: c++


【解决方案1】:

我比较两个整数不是吗??

不,你没有。看:

it->second == gradeComp

由于itstd::map&lt;string, std::vector&lt;int&gt;&gt; 的(常量)迭代器,it-&gt;second 的类型为std::vector&lt;int&gt; const&amp;。另一方面,gradeCompint。这就是你的编译器告诉你的原因

没有运算符“==”处理这些操作数

那些操作数是整数和整数的向量。


如何解决错误?

嗯,这取决于你的意思。您的意思是在向量中搜索 gradeComp 吗?或者您的意思是将其与向量中的特定值进行比较?

// is gradeComp contained in the found vector?
if (end(it->second) != std::find(begin(it->second), end(it->second), gradeComp))
{ /* ... */ }

// does gradeComp match n-th value of vector?
if (gradeComp  == it->second[n])
{ /* ... */ }

【讨论】:

    猜你喜欢
    • 2013-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-07
    相关资源
    最近更新 更多