c - 使用字符串作为数组索引标识符(无循环)

标签 c search optimization mingw

假设您想从文件中读取数据并根据其内容创建一个包含多个对象的结构(或数组),例如:

struct { 
    unsigned id; 
    char name[16]; 
    float price; 
} *items;`

然后您想使用获得的 name 来引用一个对象(某些项目),因为这是用户知道要查找什么的方式。

但是,实现使用循环的搜索会非常慢,尤其是当您每次想要访问某个项目时都必须循环并且您需要一直访问它时。将字符串转换为整数然后使用查找表(为了性能牺牲内存)是一种解决方案,但是如果名称超过 8 个字节怎么办。


使用名称标识符(结构中的字符串)访问从任意文件填充的分配结构的最快方法是什么?

最佳答案

使用 binary search tree因为这是理想的。当然,更高级的结构(如 B 树)可能会提高性能。但了解这一点是您真正需要的全部,二叉搜索树在许多情况下都非常有效,就像您上面描述的那样,它们仍然简单且易于实现。

一个简单的方法是使用bsearch()来自标准库,但随后插入数据集合变得困难或效率低下。

这些仍然是循环,但它们比线性查找更有效。

关于c - 使用字符串作为数组索引标识符(无循环),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47073738/

相关文章:

c - 将管道分隔文件*读入结构数组 C

c - 如何在c中将文件中的单词与数字分开

c - 为什么我的二叉树没有正确填充?

elasticsearch - 如何在 Kibana elasticSearch 中搜索 Json 消息

c - 为什么这个程序有不同的结果,temp=*a 和 *a= temp 不是同一件事吗?

string - 在 VBScript 中检查字符串中的非数字字符

performance - 最快的 64 位人口计数(汉明权重)

java - 根据条件替换第一个和最后一个字符(哪种方法更快)?

c - 矩阵旋转的性能优化

mysql - 跨多个相关表的相关性搜索