31#include <unordered_map>
52template <
typename T>
using SPtr = std::shared_ptr<T>;
54template <
typename T>
using SetPtr = std::unique_ptr<std::set<T>>;
56template <
typename T,
typename G>
using UMap = std::unordered_map<T, SPtr<G>>;
58template <
typename T,
typename G>
59using UMapVec = std::unordered_map<T, std::vector<SPtr<G>>>;
61template <
typename T,
typename G>
using UMapPtr = std::unique_ptr<UMap<T, G>>;
63template <
typename T,
typename G>
64using UMapVecPtr = std::unique_ptr<UMapVec<T, G>>;
66template <
typename T>
using VecSPtr = std::shared_ptr<std::vector<SPtr<T>>>;