在向量C++中查找对象的指针

今天春*_*天春天 1 c++ vector

我有一个叫做的课Position:

class Position
{
    public:
    ... //Constructor, Destructor, ...

    private:

      signed int x_;
      signed int y_;
}
Run Code Online (Sandbox Code Playgroud)

然后我有一个存储指针的向量Positions:

std::vector<Position*> positions
Run Code Online (Sandbox Code Playgroud)

如何检查Position载体中是否包含a ?例如,我有一个对象Position:

Position* p_ = new Position(0, 0);
Run Code Online (Sandbox Code Playgroud)

我想检查矢量是否包含Position具有相同坐标的?我需要哪个操作员超载?

谢谢,芭芭拉

Arm*_*yan 5

auto it = find_if(positions.begin(), positions.end(), 
                 [=](position* p)
                 {
                    return p->x() == p_->x() && p->y() == p_->y();
                 });

if(it != positions.end())
{
       //object found
}
Run Code Online (Sandbox Code Playgroud)

但是,除非你有真正的理由在向量中存储指针(例如,你将使用多态),直接存储对象要简单得多.

vector<position> v;
v.push_back(Position(1, 2));
...
Position p_(1, 4);
auto it = find_if(v.begin(), v.end(), 
                  [=](position p)
                  {
                      return p.x() == p_.x() && p.y() == p_.y();  
                  });
if(it != v.end())
{
   //position found
}
Run Code Online (Sandbox Code Playgroud)

在后一种情况下,可以通过重载operator == for position来进一步简化代码.

bool operator == (position p1, position p2)
{
   return p1.x == p2.x && p1.y == p2.y; //assuming operator == is declared friend
}
Run Code Online (Sandbox Code Playgroud)

然后你可以

auto it = find(v.begin(), v.end(), p_);
Run Code Online (Sandbox Code Playgroud)