假设您要从文件中读取并根据其内容创建包含多个对象的结构(或数组),例如:
struct {
unsigned id;
char name[16];
float price;
} *items;`
然后你想使用获得的name
引用一个对象(某个项目),因为这就是用户如何知道要查找的内容。
但是,实现使用循环的搜索将非常慢,特别是如果您每次要访问某个项目时都必须循环,并且需要始终访问它。将字符串转换为整数然后使用查找表(牺牲内存以提高性能)是一种解决方案,但如果名称长度超过8个字节则会怎样。
使用名称标识符(结构中的字符串)访问从任意文件填充的已分配结构的最快方法是什么?
答案 0 :(得分:3)
使用binary search tree是理想的选择。当然,像B-Trees这样的更高级的结构可能会提高性能。但是真正需要了解这一点,二元搜索树在很多情况下都非常有效,就像上面描述的那样,它们仍然很简单,易于实现。
一种简单的方法是使用标准库中的bsearch()
,但随后插入数据集会变得困难或效率低下。
这些仍然是循环,但它们比线性查找更有效。
答案 1 :(得分:1)
一种方法是使用带有字符串的散列函数的散列表。
只要表的大小合适且散列函数在表中均匀分布,添加和查找条目仍然有效。但是,如果发生冲突,则需要一些循环来搜索具有相同散列值的条目。