c - 确保对正确的类型进行正确的操作

标签 c random key-value

我想编写一个程序来加载包含大量随机类型的随机数据的键值存储。假设键值存储支持三种类型(字符串、列表和集合),则某些操作对集合有效(例如 union ),但对字符串无效。

#define SUBSTR 0  // substring, only on strings 
#define SEARCH 1 // search, only on strings
#define PUSH 3 // only on lists
#define ADD 4 // only on sets
#define UNION 5 // only on sets

我正在使用随机操作填充表,但希望确保这些操作在正确类型的键上执行。例如,确保 union 操作始终在 set 类型的键上执行。

int optab[100];
optab[0] = ADD
optab[1] = SUBSTR
.
.
.
optab[99] = UNION

对于要执行的每个操作,我可以在程序中首次创建 key 时在本地记录每个 key 的类型,或者继续遍历 key 空间直到找到正确类型的 key 。但我也不想这样做。

使用第一个选项时,用于维护详细信息的结构的大小会随着新键(和类型)的添加而增长。使用第二个选项时,随着键(和类型)的添加,找到该类型的正确键所需的时间也会增加。

是否有一种巧妙的方法可以正确匹配类型和操作,而不依赖于键空间的大小或支持的类型数量?

我希望给定一个操作,我可以生成一个随 secret 钥名称(例如 key90876),其中 90876 是正确类型的随机部分。

最佳答案

如果每个操作仅对一种类型有效,则不需要任何额外的空间或时间 - 您只需根据键的类型将键加载到不同的列表中,每个操作都会在相应的列表上运行。

如果相同的操作可能适用于多种类型,则没有任何特别“聪明”的方法可以做到这一点。这是一个时空权衡的问题,你应该选择最适合你的方法。随机选择 key 直到它与操作匹配为止是可行的,但不能保证在获得正确类型的 key 之前需要尝试多少次。

关于c - 确保对正确的类型进行正确的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3721367/

相关文章:

c - MCU 上的 RTC - 函数指针和回调

c - 我如何教 vim 语法高亮的附加 C 语言类型?

c++ - 如何获取Windows中特定进程使用的物理内存和cpu?

检查数组的单词是否存在于C中的txt文件中

dictionary - map 和字典有什么区别?

python - 使用字典从字符串调用函数

Matlab 用随机元素生成矩阵

c# - While 循环与 || 一起使用但不是&&,不明白为什么?

python - "math.floor(x)"和 "int(x)"是否在 Python 中对正实数产生不同的结果?

php - 快速数据库作为 PHP 数组的替代品