c++ - C++ 中的客户端服务器多对多设计模型(许多用户 - 许多应用程序)

标签 c++ data-structures many-to-many client-server

我需要在 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 是一个好的方法,还是映射完整的用户对象和应用程序对象更好?
还有其他更好的设计吗?请指教。

最佳答案

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

关于c++ - C++ 中的客户端服务器多对多设计模型(许多用户 - 许多应用程序),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7661727/

相关文章:

c - 结构定义冲突

data-structures - 为什么 VecDeque 比 Vec 慢?

algorithm - 壳排序和插入排序

java - Sql多对多查询问

mysql - 如何使用 Sequelize 连接两个表?

忽略函数中的 C++ 类型检查(需要 double,提供 int)

C++ boost 日志记录编译错误(linux)

c++ - 用于编译 .cpp 文件的 Qt .pro 文件依赖项

python - 如何进行多对多 Django 查询以查找具有 2 个给定作者的书?

c++ - Qt/mingw32 undefined reference 错误...无法链接.lib