我需要在c ++中创建用户和应用程序(多对多模型)的映射记录。一个用户可以连接许多应用程序,反之亦然,一个应用程序可以连接许多用户
我有2个设计模型,如下:
首次设计
unordered_map <string, unordered_set<string> > OneToManyMapping;
OneToManyMapping userAppMappings; // mapping records of 1 user to all application that it connects to.
OneToManyMapping appUserMappings; // mapping records of 1 application to all users that connects to it.
因此,每次用户连接到新应用程序时,我们都不必创建新记录,只需将新应用程序ID插入userAppMappings的unordered_set元素即可。和appUserMappings的情况相同。 (每当新用户连接到它时,我们只需将新用户ID插入appUserMappings的unordered_set元素。
第二次设计
unordered_multimap <string, string > ManyToManyMapping;
ManyToManyMappings userAppMappings; // mapping records of many user to many applications.
ManyToManyMappings appUserMappings; // mapping records of many applications to all users.
每次用户连接到新应用程序时,我们都必须在userAppMappings上创建新记录。与appUserMappings相同的情况。
如果我希望它支持以下操作,哪种设计效率最高:
插入,
删除,
访问(获取所有应用程序的列表,或所有用户的列表,或获取连接到用户的所有应用程序的列表,或获取连接到应用程序的所有用户的列表),
删除连接到用户的所有应用程序,删除连接到应用程序的所有用户等?
如果我使用第一个设计或第二个设计,会有什么利弊?映射用户和应用程序的ID是一种好方法,还是映射完整的User对象和Application对象更好?
还有其他更好的设计吗?请指教。
答案 0 :(得分:0)
您的第二个设计无法使用多个到多个映射,unordered_map键应该是唯一的,即您将无法为同一个用户/应用程序存储不同的记录。您要问的是多地图容器,请参阅http://en.wikipedia.org/wiki/Multimap。