我有一个下面给出的形式的向量(在C ++中):
vector<pair<int,int> > u;
现在当u.first的第一个元素等于12时,我想要从循环中断开。我正在使用以下代码:
while(1){
if((find(u.begin().first, u.end().first, 12)!=u.end().first))
{
break;
}
}
然而,它给了我错误
'unable to resolve identifier first'
答案 0 :(得分:1)
std::find
遍历一个范围,并将迭代器返回到序列中与提供的值匹配的第一个元素(在您的情况下为12
)。迭代器不是容器中的元素,它们是对容器中元素的伪引用。
您必须取消引用迭代器才能获取该元素。因此,u.begin()->first
将是容器初始元素的first
值。 u.begin().first
是荒谬的。
在任何情况下,要使用==
以外的操作查找匹配元素,您需要将find_if
与自定义谓词一起使用。例如,使用lambda表达式:
auto const it(std::find_if(u.begin(), u.end(), [](std::pair<int, int> const& v)
{
return v.first == 12;
}));
if (it != u.end())
continue;