首页 > 解决方案 > 如何构建查找表?

问题描述

我正在实现查找表。

我想我需要创建一个 的基类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,,doublestring)?” 据我所知,这将是一个可能的解决方案,尽管它会非常丑陋且效率低下。效率低下不是一个大问题,因为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}

有没有人对如何解决这个问题有任何提示或建议?

标签: c++classlookup-tables

解决方案


推荐阅读