我正在实现查找表。
int
,double
或string
。如果是int
或double
,则在查找值时,应查找其落入int的范围(因此,如果索引为0、5、10等,并且查找值为9,它应返回与索引5)相对应的内容。如果它是string
,则仅查找完全匹配。int
,double
或string
。我认为我需要创建一个table
的基类,无论它们包含什么以及返回什么,它们都放在map
中。密钥是table
的名称,并从文件中读取。在那之后,我对如何进行感到有些困惑。
我首先想到的是创建某种template
,例如template <class INDEX, class CONTENT, int COL, int ROW>
,然后定义array<INDEX>[ROW]
和array<CONTENT>[COL][ROW]
。但是当我尝试这样做时,我无法将它们放在相同的map
中(因为实例化被解释为不同的类,因此与一种类型不兼容?)。
然后我认为我应该使用继承类结构,将基类放在map
中,然后为每种类型的表创建子类。但是,如果是这种情况,我将需要很多 类来覆盖作为三种数据类型之一的index和content列的所有组合。因此,我需要进一步概括一下,然后我想:“为什么不将所有数据存储为string
并保留array<int>
(甚至是enum
?跟踪每列属于哪种情况(即int
,double
或string
)?”就我看来,这将是一个可能的解决方案,尽管这将是非常丑陋且效率低下的。低效率不是一个大问题,因为tables
不会那么大,所以存储strings
并在需要时转换为int
/ double
会是可行的,但是我还是想正确地做。另外,还有一个问题,就是table
类需要lookup
的所有不同版本(即,该类接受并返回int
,double
和/或{{1 }}),所以我可能最终在对象上调用了错误的函数(即,当表包含无法从string
强制转换的文本时,调用int
。)。再次,这不是一个大问题,除了它很丑陋,而且可能不是解决问题的方法。
我还可以使用我未使用的每种类型的“空string
”,并跟踪其中的另一个arrays
(或array<int>
)的数据,以及也许是enum
,其中map<int, array<TYPE> >
是每一列的类型,然后根据我要查找的列来确定TYPE
包含了我已保存/需要的内容。但这让人感到更加困惑和尴尬(但也许我错了)。
或者,我可以,当然,开始将表拆分成较小的表(即,也许所有表都有一个索引,只有一个内容列,或者甚至有一个连接到“索引列”的结构)一个或多个“内容列”)。但是然后我需要找出一种整齐的方法来做,到目前为止我还没有做到。
无论如何,数据文件可能看起来像:
array
有人对如何解决此问题有任何提示或建议吗?