c++ - 如何构建查找表?
问题描述
我正在实现查找表。
- 应该有一个索引列,可以是
int
、double
或string
。如果是int
ordouble
,查找一个值时,它应该查找它在 int 中的哪个范围(所以如果索引是 0、5、10 等,并且查找值为 9,它应该返回索引 5 对应的内容) . 如果它是 astring
,它只查找完全匹配。 - 内容是一列或多列,每一列可以(独立于彼此和索引)是
int
、double
或string
。 - 表的数据应该存在于一个单独的文件中(最好是一个用于所有表的文件,无论类型如何)。
- 然后应该以“半动态”方式存储表(即,在运行时它们将被修复,但我需要能够在运行之间更新、添加或修改表)。
我想我需要创建一个 的基类table
,它放在 a 中map
,不管它们包含什么以及它们返回什么。键是 的名称table
,并从文件中读取。在那之后,我对如何进行有点困惑。
我首先有创建某种 的想法template
,例如template <class INDEX, class CONTENT, int COL, int ROW>
然后定义array<INDEX>[ROW]
和array<CONTENT>[COL][ROW]
。但是当我尝试这样做时,我无法将它们放在同一个中map
(因为实例被解释为不同的类,因此与一种类型不兼容?)。
然后我想我可能应该使用继承类结构,基类在 中map
,然后是每种类型表的子类。但是,如果是这种情况,我需要很多类来涵盖作为三种数据类型之一的索引和内容列的所有组合。所以我需要更概括一点,然后我想“为什么不将所有数据存储为string
并保留一个array<int>
(甚至enum
?)以跟踪每列是哪些情况(即int
,,double
或string
)?” 据我所知,这将是一个可能的解决方案,尽管它会非常丑陋且效率低下。效率低下不是一个大问题,因为tables
不会有那么多或那么大,所以存储strings
和转换到int
/double
需要时是可行的,但无论如何我都想正确地做到这一点。此外,还有一个问题是让table
类需要所有不同版本lookup
(即接受并返回int
,double
和/或string
),所以我最终可能会在对象上调用错误的函数(即int
当表包含时调用无法从string
.) 投射的文本。同样,这不是一个大问题,除了它很丑而且可能不是这样做的方法。
我还可以将我不使用的每种类型都设为“空arrays
”,并跟踪哪些数据与另一个array<int>
(或enum
)有数据,也许还有一个map<int, array<TYPE> >
,每列的类型在哪里TYPE
,然后根据哪个来确定我正在寻找array
包含我保存/需要的内容的列。但这感觉更加复杂和尴尬(但也许我错了)。
或者,我当然可以开始将表拆分成更小的表(即,可能所有表都只有一个索引和一个内容列,或者甚至是连接到一个或多个“内容列”的“索引列”结构)。但是,我需要找出一种巧妙的方法来做到这一点,这是迄今为止我无法做到的。
无论如何,数据文件可能如下所示:
Age Table
0;Kid
18;Young Adult
30;Middle-Age
65;Retired
Average Living Space Per District
Kid;10;14;12
Young Adult;20;30;35
Middle-Age;30;50;50
Retired;50;60;55
{etc}
有没有人对如何解决这个问题有任何提示或建议?
解决方案
推荐阅读
- installation - 在选择 C:\CustomFolder 安装路径时,安装路径应为子文件夹 C:\CustomFolder\Parent\Child
- python - 对已排序 csv 的高效查询
- linux - 如何创建一个linux终端ASCII字符标志?
- python - 如何实施 kolmogorov-smirnov 测试以提取适合我的数据的最佳分布?
- azure - 从 ARM 模板中的 Azure 密钥保管库获取最新版本的证书
- node.js - 将原始数据上传到 Google Cloud 功能中的 Firebase 存储桶?
- payara - Payara 4.1.2.181 与 Java 7 的兼容性
- observable - MobX 计算 - 计算值链的协调
- tensorflow - 对 3 维张量的每两个连续行的列求和
- vb.net - 如何将文本字符串转换为 GSM 7 位