c++ - 搜索 vector 时出现问题?

标签 c++

我有一个下面给出的形式的 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/

相关文章:

c++ - 有没有更好的方法来通过模板用预先计算的值填充数组(用于运行时)?

c++如何通过套接字发送Hbitmap

c++ - 如果调试运行正常但发布崩溃怎么办

c++ - 0xC0000005 : Access violation reading location 0x00000000

c++ - "xxx.exe is not a valid Win32 application"在 VS 刚刚构建之后

c++ - xcode 关键字语法着色,不识别 c++ std::string

c++ - 我们什么时候应该将赋值运算符设为私有(private)而不是实现

c++ - 函数参数前的类关键字是什么?

C++程序故障?

c++ - 使用 HashMap 将点划分为子区域