传统的std::map只能表示<key,value>的形式,即一个key对应一个value,但在实际应用场合中,这往往受到了限制。
举个简单的例子,一个学生假如选择了多门课程,在数据库中是<学号,课程>的形式,我们想将它读入数据库中,并快速的进行访问。
我们可以通过构建一个简单的map结构就可以完成这一功能:
std::map <int student_num, std::set<std::string> > student_num_course;
//读入
student_num_course[1].insert("语文");
student_num_course[1].insert("数学");
// 访问
std::set<std::string>::iterator it=student_num_course[1].begin();
for(; it != student_num_course[1].end(); it++)
{
cout << *it<<"\t";
}
对于value(课程),我们使用vector容器也可以完成同样的功能,但区别在于,vector是顺序容器、而set是关联容器,元素作为键值,因此set中不存在重复的元素,这点在关键时候有着重要的作用。例如在数据库中,用户向其中添加了一条重复数据,利用vector存储该结构有导致不能预期的问题,而set则有利的避免了这一点。
multi_map: