0

A などの型構造のオブジェクトを含むベクトル v があります。次に、このベクトルに格納されている特定のオブジェクトの反復子を見つける必要があります。例えば:

  struct a
    {
    };
    vector<a> v;
    struct temp;  //initialized

今私が使うなら

find(v.begin(),v.end(), temp);

次に、コンパイラは operator に一致しないというエラーを生成します'=='

ベクター内のオブジェクトに対応するイテレータを取得するための回避策はありますか?

4

1 に答える 1

2

bool operator==(const a& lhs, const a& rhs)クラスに等値演算子を提供するか、比較ファンクターをに渡す必要がありstd::find_ifます。

struct FindHelper
{
  FindHelper(const a& elem) : elem_(elem) {}
  bool operator()(const a& obj) const
  {
  // implement equality logic here using elem_ and obj
  }
  const a& elem_;
};

vector<a> v;
a temp;
auto it = std::find_if(v.begin(), v.end(), FindHelper(temp));

あるいは、c++11 では、ファンクターの代わりにラムダ関数を使用できます。

auto it = std::find_if(v.begin(), v.end(),  
                       [&temp](const a& elem) { /* implement logic here */ });
于 2013-02-24T20:09:07.610 に答える