0

我有一个如下形式的向量(在 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'
4

1 回答 1

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;
于 2012-07-10T05:36:42.580 回答