Мне нужно создать сопоставление записей пользователей и приложений (многие ко многим модели) в 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.
Таким образом, каждый раз, когда пользователь подключается к новым приложениям, нам не нужно создавать новую запись, а просто вставлять новый идентификатор приложения в элемент unordered_set в userAppMappings. И тот же случай для appUserMappings. (каждый раз, когда к нему подключается новый пользователь, мы просто вставляем новый идентификатор пользователя в элемент unordered_set в appUserMappings.
Второй дизайн
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.
Какой дизайн будет наиболее эффективным, если я хочу, чтобы он поддерживал следующие операции:
вставка
Удаление
Доступ (получить список всех приложений, или список всех пользователей, или получить список всех приложений, которые подключены к пользователю, или получить список всех пользователей, подключенных к приложению),
Удалить все приложения, подключенные к пользователю, удалить всех пользователей, подключенных к приложению и т. Д.?
Какими будут плюсы и минусы, если я использую первый дизайн или второй дизайн? Является ли сопоставление идентификатора пользователя и приложения хорошим подходом или лучше сопоставить весь объект пользователя и объект приложения?
Есть ли другой лучший дизайн? Пожалуйста, сообщите.