gpt4 book ai didi

具有类键和类值的 C++ STL 映射容器

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:49:11 25 4
gpt4 key购买 nike

假设我有这样一个类:

class Point
{
private:
int x, y;
public:
void setX(int arg_x) { x = arg_x; }
void sety(int arg_y) { y = arg_y; }
int getX() const { return x; }
int gety() const { return y; }
};

现在我想要一张这样的 map :

map<Point, Point> m;

但是我需要第三个参数。我在cplusplus里读到这第三个参数是用来比较什么的,但是没看懂那是什么东西。谁能给我解释一下?

最佳答案

如果您不需要单独的比较函数,您可以使用这样的方法扩展您的类

class Point
{
private:
int x, y;
public:

bool operator<( const Point& other) const
{
if ( x == other.x )
{
return y < other.y;
}

return x < other.x;
}
};

默认情况下,STL 映射通过某种排序概念对其中的所有元素进行排序。在这种情况下,使用此运算符。有时您无法控制 Point 类,或者您可能想在两个不同的 map 中使用它,每个 map 都定义了自己的顺序。例如,一张 map 可能首先按 x 对点进行排序,而另一张 map 可能首先按 y 对点进行排序。因此,如果比较运算符独立于类 Point 可能会有所帮助。你可以做这样的事情。

class Point
{
public:
int x, y;
};


struct PointComparer
{
bool operator()( const Point& first , const Point& second) const
{
if ( first.x == second.x )
{
return first.y < second.y;
}

return first.x < second.x;
}
};

map<Point, Point , PointComparer> m;

关于具有类键和类值的 C++ STL 映射容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6973406/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com