我有一个包含大量字符串元素的结构成员。我想要的是迭代结构的整个成员并只计算不同的元素(不同的姓氏)。
struct log {
char *last;
};
...
struct log *l
l->last = last_name; // loading *last member with data coming from last_name var
...
比较和计算*last 上当前唯一元素的好方法是什么?
任何帮助将不胜感激。
last_name
根据键对数组进行排序。重复项将彼此相邻。
对数组进行线性扫描,检查当前项之后有多少条目具有相同的姓氏。为所有这些重复项增加一次计数器。将您的阅读头增加到第一个不同的条目。
n
对于大小为:的数组O(n lg n) + O(n) = O(n lg n)
,假设有一个O(n lg n)
排序例程。
如果你想迭代多个项目,如果这些项目在一个数组中,那就容易多了。您是否可以考虑重新定义您的struct
定义以将项目包含在数组中?您也许可以使用一个enum
甚至一系列#define
s 来索引数组。
如果您的数据无法明智地进入数组,您最终可能会得到一个解决方案,该解决方案看起来像是一次将值与结构中的每个项目进行比较。