我有这个分层的数据,因此我将它存储在树中。我想为它提供搜索功能。我必须为此创建二叉树吗?我不希望两次有数千个节点。是不是有一种树允许我按照给定的顺序存储数据,还提供二进制树,如高效的搜索设置,几乎没有开销?
任何其他数据结构建议也将受到赞赏。
感谢。
编辑:
一些细节:树是一个非常简单的“手工制作”树,可以被认为是非常基本的。问题是,有数千个名称和其他文本将作为我想要搜索的数据输入,但我不想以传统方式遍历节点,需要快速搜索,如二进制搜索。
另外,重要的是,用户必须能够看到他输入的结构而不是已排序的结构。所以我不能保持它排序以支持搜索。这就是为什么我说我不想两次拥有数千个节点。
答案 0 :(得分:1)
如果您不想更改树的层次结构,请使用map存储指向顶点的指针:std::map<SearchKeyType,Vertex*> M
。
每次将顶点添加到树中时,都需要将其添加到地图中。这很简单:M[key]=&vertex
。要查找元素,请使用M.find(key);
或M[key];
,如果您确定该密钥存在。
如果您的树有重复的密钥,那么您应该使用multimap。
编辑:如果你的密钥的大小太大,你可以使用指针键而不是键:
inline bool comparisonFunction(SearchKeyType * arg1,SearchKeyType * arg2);
std::map<SearchKeyType *, Vertex *, comparisonFunction> M;
inline bool comparisonFunction(SearchKeyType * arg1,SearchKeyType * arg2)
{
return (*arg1)<(*arg2);
}
要搜索值为V
的元素,您必须写下以下内容:
Vertex * v = M[&V]; // assuming that element V exists in M