Нормальный std::map
(или std::unordered_map
) может это сделать. У вас есть несколько вариантов того, как это сделать:
std::shared_ptr
std::tuple
) для сбора ключей (хотя, вероятно, это больше проблем с обработкой этого чем это стоит, ничего не рекомендую) С Boost у вас есть готовое решение, которое вы можете просто используйте, и если вы уже используете Boost в своем проекте (это отличный набор библиотек и хорошо дополняет стандартную библиотеку), я думаю, что это решение не требует выбора.