我正在尝试编写编译器/代码编辑器。
为了加快过程,我想要一个红色和黑色的树,返回一个节点,然后我可以用来将其在其下方获取字符串,并且它的位置值,并使用其父节点作为存储令牌的地方(这样(作为alphanumeric_word或left_peartheSis(。
我很难找到最好的方法。
我基本上想要可以执行以下操作的事情:
tree.insert("01234567890123456789",0);
node = tree.at(10);
tree.insert("string",5);
node.index(); //should be 10+length("string")
node.value(); //should be '0'
node.tokenPtr.value; //should point to a token with the value of NUMBER
我正在寻找可以修改的这棵树的最简单实现,因为这些树可能会令人沮丧地从头开始构建和调试。
以下代码是我正在寻找的(它具有父节点(,但缺少索引查找的索引功能。这是需要的,因为我想创建一个将节点用作键和node.index((的映射为排序值,以便我不必更新该映射中的键。
[[[Archive.gamedev.net/archive/reference/programming/features/tstorage/page2.html]]
我试图查看SGI的绳索强度,但是代码压倒性且难以理解。
本教程似乎很有帮助,但是它也没有提供双重链接的树,我认为可以用来找到节点的索引:
[[EvernallyConfuzzled.com/tuts/datastructures/jsw_tut_rbtree.aspx]]
更新:我找到了一个具有父节点的实现,但是它仍然缺乏索引计数属性:
[[web.mit.edu/~emin/desktop/ref_to_emin/www.old/source_code/red_black_tree/index.html]
我找到了一个解决方案,另一种解决方案可能起作用。
您必须使用sgi stl绳索mutable_begin(( (index(迭代器。
也有此功能,但是我仍然很难分析SGI绳索代码以查看它的作用:
mutable_reference_at(index(