C++ 矢量搜索中的问题?
我有一个如下形式的向量(在C++中): 然而,它给了我一个错误C++ 矢量搜索中的问题?,c++,C++,我有一个如下形式的向量(在C++中): 然而,它给了我一个错误 'unable to resolve identifier first' std::find在一个范围内迭代,并将迭代器返回到序列中与提供的值匹配的第一个元素(12,在您的示例中)。迭代器不是容器中的元素,而是对容器中元素的伪引用 必须取消对迭代器的引用才能获得元素。因此,u.begin()->first将是容器初始元素的first值u.begin()。first毫无意义 在任何情况下,要使用除==以外的操作查找匹配元素
'unable to resolve identifier first'
std::find
在一个范围内迭代,并将迭代器返回到序列中与提供的值匹配的第一个元素(12
,在您的示例中)。迭代器不是容器中的元素,而是对容器中元素的伪引用
必须取消对迭代器的引用才能获得元素。因此,u.begin()->first
将是容器初始元素的first
值u.begin()。first
毫无意义
在任何情况下,要使用除==
以外的操作查找匹配元素,您需要使用带有自定义谓词的find\u 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;
auto const it(std::find_if(u.begin(),u.end(),[])(std::pair const&v)
{
返回v.first==12;
}));
如果(it!=u.end())
继续;
它也会返回…这个返回意味着什么…“continue”或“break”它是一个lambda表达式find_if
将为每个元素调用lambda,如果元素匹配,lambda将返回true
find_if
然后将迭代器返回到第一个元素,对于该元素,find_if
返回true
(或者u.end()
如果lambda返回true
,则不返回任何元素)。然后,您需要将迭代器与u.end()进行比较,以查看是否找到了匹配项。在这里,它再次给出了无法解析标识符“v”的情况。James的回答很好地解决了这一问题。我会指出一些其他的事情。首先,请注意begin()
和end()
返回迭代器类型,因此
对它们无效。第二,即使可以对它们进行操作,end()
也不会引用最后一个元素;它指的是超出该位置的一个位置,因此除非用作终止符,否则永远无效。vector
包含名为front()
和back()
的特殊非迭代器方法,这些方法在您想要直接检查值时非常有用。(仅供参考;在本例中,您无论如何都不能真正引用元素;请参见James的答案。)如果find return为false,而find return为无穷大,这是很危险的。
'unable to resolve identifier first'
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;