我有一个叫做的课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具有相同坐标的?我需要哪个操作员超载?
谢谢,芭芭拉
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)