标题可能有点误导。 我有以下问题:我有一个由叶子和内部节点组成的树。用户应该能够在叶子节点中存储任何信息,并且树具有一些方法,这些方法会获取一组用户定义的值,并需要在常数时间(而不是摊销时间)内访问相应的叶子节点。
我想到了以下的解决方案,但由于无法访问嵌套类的私有成员,因此它不起作用:用户创建树,并为每个叶子节点创建一个
我想到了以下的解决方案,但由于无法访问嵌套类的私有成员,因此它不起作用:用户创建树,并为每个叶子节点创建一个
UserElement
实例,其中包含相应叶子节点的用户定义值。一旦调用像doSomethingWithTheTree(list>)这样的方法并且构建了树,则树将创建相应的叶子节点并将其保存在私有字段leaf
中。每当用户想要调用一些与其用户定义值对应的叶子节点的方法时,只需通过提供相应的UserElement
调用该方法,然后树可以在常数时间内检索相应的叶子节点。class Tree {
public:
template <typename T>
class UserElement {
private:
T user_value;
tree_node* leaf; // this has to be private for
// everyone outside the class `Tree`
public:
T getInf() {
return user_value;
}
void setInf(T i) {
user_value = i;
}
};
void doSomethingWithTheTree(list<UserElement<T>> elements) {
...
// I want to be able to access elem.leaf for all elements
}
}