最好的STL容器

时间:2017-10-22 15:14:20

标签: c++ stl

我正在开发一个基于文本的容器库应用程序来存储歌曲对象,我还将创建艺术家和专辑对象。

它将实现以下功能

将项目添加到库

  • 从库中删除项目
  • 编辑库中项目的任何属性
  • 搜索图书馆中的项目。
  • 按任何项目的属性
  • 对库中的项目进行排序

当应用程序首次加载时,库将从文本文件加载。

我正在努力决定用于每个对象的最合适的STL容器应该是什么。我想过使用矢量但是这会允许重复。

我的另一个问题是,如果我说一个歌曲类,我应该有一个名为SongLibrary的单独的类,其中包含所有歌曲对象,还是应该将它们存储在主要的容器中?

3 个答案:

答案 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
  • 对库中的项目进行排序