没有操作员" =="制作这些操作数

时间:2018-05-14 09:15:17

标签: c++

所以我尝试比较我从它获得的迭代器值 - >第二个用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传递的int和it-&gt; second。

错误是:

  

严重级代码描述项目文件行抑制状态   错误C2678二进制&#39; ==&#39;:找不到左侧的操作符   类型的操作数&#39; const std :: vector&gt;&#39; (或那里   是不可接受的转换)

如何解决错误?我找到了仅使用迭代器获取key值的示例。

1 个答案:

答案 0 :(得分:6)

  

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

不,不。看:

it->second == gradeComp

由于itstd::map<string, std::vector<int>>的(const)迭代器,it->second的类型为std::vector<int> const&。另一方面,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])
{ /* ... */ }