在我的作业中,我得到了这个C风格的结构:
typedef struct {
int x, y;
} Point;
我有2张AVL树。第一个上的值应首先按X位置排序,然后按Y排序,在第二个树中排序,首先按Y,然后按X排序。
我的C ++有点生疏,所以我想知道我是否认为正确:
因为我有两种形式的排序,我应该有2个额外的类将用作AVL树的键:每个将基于Point类型,并且将赋值运算符重载以便能够从键类型的键类型。
我想使用两个类的原因是重载“<”每个人的操作符,所以我不必有一些奇怪的compareByX(Point p)
函数。
AVL树声明的伪代码:
AVLTree< XthenY, Value > firstTree;
AVLTree< YthenX, Value > secondTree;
这是否合理?
我希望我的问题很清楚
答案 0 :(得分:0)
C ++标准库通过一个应该是函数或函数的模板参数来处理它:
struct XthenY
{
bool operator()(Point const &a, Point const &b) const
{
// comparison logic
}
};
请参阅original STL docs for map
中的strcmp
示例。