我正在开发一个基于文本的容器库应用程序来存储歌曲对象,我还将创建艺术家和专辑对象。
它将实现以下功能
将项目添加到库
当应用程序首次加载时,库将从文本文件加载。
我正在努力决定用于每个对象的最合适的STL容器应该是什么。我想过使用矢量但是这会允许重复。
我的另一个问题是,如果我说一个歌曲类,我应该有一个名为SongLibrary的单独的类,其中包含所有歌曲对象,还是应该将它们存储在主要的容器中?
答案 0 :(得分:1)
我只是说创建一个SongLibrary
来封装歌曲存储实现和使用的容器。将容器暴露在主类中会污染它,使其更难测试并且更难以扩展(例如改组)。
通过这样做,您以后可以更轻松地更改所使用的容器而无需更改呼叫者。
至于容器,需要考虑很多,例如:你需要更快的读取时间或写入时间吗?通常我们更喜欢前者,因此在这种情况下,基于索引的容器会更好。无论如何,这可能最终会过早优化,所以我只是选择std::set
,因为它已经处理了重复,这使您的生活更轻松。然后,如果证明这还不够,您可以随时修改您的库类。
答案 1 :(得分:1)
我会使用带有结构和3个地图的矢量来快速查找:
/tags
访问功能非常明显。
您可以将所有内容封装在课程中。
答案 2 :(得分:0)
我认为您应该使用sqlite db,然后您可以为每个操作使用SQL命令。
例如:您可以使用以下列为歌曲文件创建表格:
rowid (unique),title,artist,album,year,filename(unique)
。
您可以通过SQL命令实现每个操作:
delete
sql命令update
sql命令select field,rowid
+将结果放入std::map<string,rowid>
select ... order by