搜索向量时遇到的问题?

时间:2012-07-10 05:34:59

标签: c++

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

1 个答案:

答案 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;