2011-10-05 50 views
1

我需要在C++中创建用户和应用程序(多对多模型)的映射记录。一个用户可以连接多个应用程序,反之亦然,一个应用程序可以连接多个用户。
我有2个设计模型,如下:
首先设计客户端服务器C++中的许多设计模型(许多用户 - 许多应用程序)

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

您的第二个设计不会像许多映射一样工作,unordered_map键应该是唯一的,也就是说您将无法为同一用户/应用程序存储不同的记录。您所要求的是multimap容器,请参见http://en.wikipedia.org/wiki/Multimap

+0

是的,抱歉的错字。第二种设计基于unordered_multimap。感谢提及。我已更新帖子! –

相关问题