C++ 如何构造查找表?
我正在实现查找表C++ 如何构造查找表?,c++,class,lookup-tables,C++,Class,Lookup Tables,我正在实现查找表 应该有一个索引列,可以是int、double或string。如果是int或double,则在查找值时,应查找其属于int的范围(因此,如果索引为0、5、10等,且查找值为9,则应返回与索引5对应的内容)。如果它是一个字符串,则只查找精确匹配 内容是一个或多个列,每个列(独立于彼此和索引)也可以是int、double、或string 表的数据应该存在于一个单独的文件中(最好是所有表的一个文件,无论类型如何) 然后,这些表应该以“半动态”的方式存储(即,在运行时它们将被修复,但我
- 应该有一个索引列,可以是
、int
或double
。如果是string
或int
,则在查找值时,应查找其属于int的范围(因此,如果索引为0、5、10等,且查找值为9,则应返回与索引5对应的内容)。如果它是一个double
,则只查找精确匹配字符串
- 内容是一个或多个列,每个列(独立于彼此和索引)也可以是
、int
、或double
string
- 表的数据应该存在于一个单独的文件中(最好是所有表的一个文件,无论类型如何)
- 然后,这些表应该以“半动态”的方式存储(即,在运行时它们将被修复,但我需要能够在运行之间更新、添加或修改这些表)
表
的基类,它位于映射
中,而不管它们包含什么和返回什么。键是表的名称,从文件中读取。在那之后,我有点困惑如何继续
我首先想到了创建某种模板
,比如模板
,然后定义数组[ROW]
和数组[COL][ROW]
。但是当我尝试这样做时,我无法将它们放在同一个映射中(因为实例化被解释为不同的类,因此与一种类型不兼容?)
然后我想我应该使用继承类结构,在映射中使用基类,然后为每种类型的表使用子类。然而,如果是这样的话,我需要很多类来覆盖索引和内容列的所有组合,这是三种数据类型之一。所以我需要进一步概括,然后我想“为什么我不将所有数据存储为string
,并保留一个array
(甚至enum
?)来跟踪每列是哪种情况(即int
,double
,或string
)”据我看来,这是一个可能的解决方案,虽然这会很难看,效率也很低。效率低下并不是一个大问题,因为表不会太多或太大,所以存储字符串并在需要时转换为int
/双精度是可行的,但无论如何我都想做得很好。另外,还有一个问题是,表
类需要所有不同版本的查找
(即接收并返回int
、double
、和/或字符串
),因此我可能会在对象上调用错误的函数(即当表格由不能从字符串转换的文本组成时,调用int
)。同样,这不是一个大问题,除此之外,它很难看,可能不是这样做的方法
我还可以拥有我不使用的每种类型的“空数组
”,并跟踪其中包含另一个数组
(或枚举
)数据的数组,也可能是一个映射,其中TYPE
是每个列的类型,然后根据哪个列找出数组
包含我保存/需要的内容。但这感觉更加复杂和尴尬(但可能我错了)
或者,我当然可以开始将表拆分成更小的表(即可能所有表都有一个索引,只有一个内容列,或者甚至有一个连接到一个或多个“内容列”的“索引列”结构)。但是,我需要找到一种简洁的方法来实现这一点,而到目前为止我还没有做到
无论如何,数据文件可能如下所示:
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}
有人对如何解决这个问题有任何提示或建议吗?从外部看,您真正想要/需要的似乎是一个各种数据库(然后您可以查询到该数据库)。你有没有研究过这个选项,而不是手忙脚乱?MySQL/PostgreSQL/SQLite…我想说的是,选项并不短缺。为什么不适合你?你的问题更适合你。如果你已经用代码实现了你的解决方案,那么你也可以试试你的问题可能不适合stackoverflow.com,因为大约std::map
:它自带了自己的元素,它会发现第一个元素更大,然后所需的较低值将是std::prev(map.upper_bound(age))
(注意:也有lower_bound
,给第一个元素的值不小于此值,但这会给与边界完全匹配的年龄带来不好的结果).对于如何正确应用上限
,甚至已经有了一个解决方案。。。