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
    double
    ,则在查找值时,应查找其属于int的范围(因此,如果索引为0、5、10等,且查找值为9,则应返回与索引5对应的内容)。如果它是一个
    字符串
    ,则只查找精确匹配
  • 内容是一个或多个列,每个列(独立于彼此和索引)也可以是
    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
,给第一个元素的值不小于此值,但这会给与边界完全匹配的年龄带来不好的结果).对于如何正确应用
上限
,甚至已经有了一个解决方案。。。