Какой контейнер (ы) std использовать для представления стопки игральных карт
Всем привет,
В настоящее время я работаю над проектом, который подразумевает стопки игральных карт.
И мне трудно решить, какой контейнер(ы) использовать для их представления.
Вот основные требования, которые я могу перечислить:
- стек должен быть последовательный потому что порядок карт очень важен. Ведет меня к контейнерам последовательности.
- этот размер из стека не фиксируется Карты можно вынимать из случайных мест, в любом количестве, и то же самое для добавления карт. Приводит меня к std:: list.
- Поскольку заказы на перемещение по стекам даются извне (пользователям), мне нужно проверить, является ли карта (или подмножество стека) содержится в стеке. Приводит меня к ассоциативным контейнерам для быстрого доступа к случайному месту.
- Мы сможем это сделать. перетасуйте стопку.
- Это так не возможно, чтобы два раза добавить та же карта в стопке. Карты являются флагами с уникальными идентификаторами, так что технически я могу иметь двух пиковых королей в одной стопке, но не с одним и тем же идентификатором (если вы объедините две колоды карт для игры).
Я знаю, что однозначного ответа нет, но если у вас есть хоть какая-то подсказка, чтобы помочь мне решить окончательную структуру моей стопки игральных карт, это было бы здорово !
Что я уже пробовал:
Я уже представил несколько представлений.
Сначала я представляю стек с помощью вектор из карт.
Это решение работает для всех ограничений,но оно медленно проверяет, содержится ли карта или подмножество карт в стеке.
Также дорого добавить или удалить карту в случайном месте.
Затем я использовал сочетание в список карты и unordered_map.
И то, и другое синхронизируется операциями добавления и удаления.
То список используется для последовательности, гибкости размера и случайного добавления/удаления.
То unordered_map используется для произвольного доступа (метод содержит).
Затем я понял, что использовать std::shuffle в списке невозможно. Так что на данный момент я использую вектор и еще unordered_map Возвращаясь к проблеме случайного добавления/удаления...