我理解AVL树如何与整数一起工作..但是我很难找到一种方法来将字符串插入到一个中。如何比较字符串?
我想过只使用ASCII总值并按这种方式排序..但在这种情况下,插入两个相同的ASCII字(例如“绑定”和“节食”)似乎会返回错误。
你如何解决这个问题?我是否以错误的方式思考它,并需要一种不同的方式对节点进行排序?
并且它们不需要按字母顺序或任何其他内容......只需在AVL树中,这样我就可以快速搜索它们。
答案 0 :(得分:2)
使用字符串时,通常使用词法比较 - 即,从每个字符串的第一个字符开始。如果一个小于另一个(例如,“饮食”与“捆绑”,“d”小于“t”),则该比较基于该字母。当且仅当第一个字母相等时,您转到第二个字母,依此类推。只有当字符串从开头到结尾的每个字符(按顺序)相等时,两者才相等。
答案 1 :(得分:1)
好吧,由于AVL树是一个有序结构,int string::compare(const string&) const
例程应该能够告诉你如何订购字符串。
如果项目的顺序实际上是无关紧要的,那么您将从无序结构中获得更好的性能,这可以更好地利用您尝试做的事情:hash table。
将类似字符串的内容映射到固定大小的键称为hash function,将多个键映射到相同值的现象称为collision。在散列时偶尔会发生冲突,并且需要扩展基本数据结构来处理它,可能是通过使每个节点成为所有项目的“桶”(链表,向量,数组,有什么)碰撞哈希值然后线性搜索。