没有运算符"=="匹配这些操作数

Iva*_*anp 2 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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

错误是:

严重级代码描述项目文件行抑制状态错误C2678二进制'==':找不到运算符,它接受类型为'const std :: vector>'的左操作数(或者没有可接受的转换)

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

YSC*_*YSC 6

我比较两个整数不是吗?

你不可以.看:

it->second == gradeComp
Run Code Online (Sandbox Code Playgroud)

因为it是(const)迭代器std::map<string, std::vector<int>>,it->second有类型std::vector<int> const&.另一方面,gradeComp是一个int.这就是你的编译器告诉你的原因

没有运算符"=="匹配这些操作数

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


如何解决错误?

嗯,这取决于你的意思.你的意思是在向量中搜索 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])
{ /* ... */ }
Run Code Online (Sandbox Code Playgroud)