所以我尝试比较我从它获得的迭代器值 - >第二个用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值的示例。
答案 0 :(得分:6)
我比较两个整数不是吗??
不,不。看:
it->second == gradeComp
由于it
是std::map<string, std::vector<int>>
的(const)迭代器,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])
{ /* ... */ }