我正在使用Qt编写一个类,需要导入一个字典,用于查找命令并构建命令句.命令以分层方式排列,并具有相应的十六进制键和值定义.为了便于说明,它可能如下所示:
01 : Volume
| - 01 : Step : 00=Down, 01=Up
| - 02 : Set : ceil(255/100 * x)
02 : Power
| - 01 : Power : 00=Off, 01=On
| - 02 : Sleep : ...etc
我想加载这个词典,然后能够搜索"Volume/Set/50"并返回命令句"01 02 80"或查找"01 02 80"并返回"Volume/Set/50".
实际的实现稍微复杂一些,并且在树结构中具有不同级别的命令,并且可以包括来自单个句子中的不同级别的任何数量和命令组合.
编辑:
下面由volodymyr提供的评论介绍了一个我不熟悉的概念(Trie).它可能是这个特定场景的最佳实现,但我还需要进一步研究它.我仍然对我原来的问题的答案感兴趣(增加了Trie):
使用这些方法中的每一种方法有哪些优点和缺点?
原始问题:(对于上下文)
Qt树模型,嵌套地图或其他方法更适合存储字典吗?我意识到"更好"可能是主观的,但我想知道权衡.
我已经在构建Qt树模型以在QTreeView中显示一些其他数据,因此代码已经存在并且可以轻松使用.树模型是否允许更加灵活地加载具有不同结构的字典?有一个更好的方法吗?或者可能是标准的设计模式?
我是C++的新手(之前的Python经验,涉及Java),我正在编写一个小程序作为熟悉项目.作为程序的一部分,我正在编写一个类来解码一些数据,并最终编写一个类似的将执行编码的类.代码是我确定我会经常重用的东西,并认为创建一个库作为项目的一部分会很有趣.我的问题是,什么被认为是创建图书馆的最佳做法?
编辑:(修订)
在提出这个问题之后,我意识到我不知道我不知道的是什么.我做了一些更多的研究,这应该有助于使我的问题更具体:
原始问题:(上下文)
我最初的想法是创建包含MyEncoder和MyDecoder类的MyLib是最方便的.
如果我这样做,我只是在标题中声明这两个类吗?
我想从这个库中创建一个DLL,以实现可移植性和体验.我确信有很多关于创建和使用DLL的信息(这不是这个问题的主题),但是如果有一个特别好的教程(对于Qt)请传递它.
我的假设是,最好为MyEncoder和MyDecoder使用单独的命名空间来实现此实现,而不是MyLib的一个命名空间?
我可以看到这种方法的一个折衷是应用程序的大小,因为包括MyLib.h将包括编码器和解码器的代码(如果编码器和解码器是单独的应用程序).这是假设我没有使用DLL.
我想我得到的是:
如果它更具体,我在Qt Creator中使用Qt 4.7.4进行开发.