我怎么能有一个具有许多值的关联数组

时间:2013-04-14 20:48:41

标签: c++ arrays associative-array

我有一张带有标题的专辑,它出现的年份和专辑中的歌曲。

我的阵列设置如下:

std::string alb_name[256]['title', 'year', 'songs'];

但我希望歌曲关联数组最多能容纳20首歌曲。 是否有捷径可寻?我正在编程1课程,我无法找到一种方法来做到这一点。任何帮助都是适当的。

3 个答案:

答案 0 :(得分:5)

C ++有一个叫做std::map的东西,可以作为一个关联数组。

#include <map>
#include <string>
#include <vector>

struct AlbumData
{
    int year;
    std::vector<std::string> songs;
};

std::map<std::string, AlbumData> albums;

AlbumData d;
d.year = 1966;
d.songs.push_back("A Day in the Life");
d.songs.push_back("When I'm 64");
albums["Sgt Pepper's Lonely Hearts Club Band"] = d;

答案 1 :(得分:1)

首先,您要使用数据库:At what point is it worth using a database?

您需要多个关联数组或地图。这将允许您根据不同的字段进行搜索和排序。

例如:
标题表

+----------+-------+  
| ID_Title | Title |  
+----------+-------+  

艺术家表

+-----------+-------------+
| ID_Artist | Artist name |
+-----------+-------------+

歌曲表

+-----------+----------+
| ID_Artist | ID_Title |
+-----------+----------+

您可以将歌曲表设置为按艺术家或标题排序。

还在网上搜索“数据库普通表格”。

答案 2 :(得分:0)

struct结构数据:

struct Album {
    string title;
    string year;
    vector<string> tracks;
};

map将值映射到另一个值:

map<string, Album> albums;

Album album;
album.title = "Acoustic Sketches";
album.year = "1996";
album.tracks.push_back("Metamorphosis");
album.tracks.push_back("Rivulets");
//.. etc
albums[album.title] = album;