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。無意味です。firstu.begin().first

いずれにせよ、 以外の操作を使用して一致する要素を見つけるには、カスタム述語==を使用する必要があります。find_ifたとえば、ラムダ式を使用すると、次のようになります。

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 に答える