我有一个下面给出的形式的 vector (在 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'
最佳答案
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;
关于c++ - 搜索 vector 时出现问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11407174/