Хотя другие ответы верны, я добавлю, что , если вы не можете использовать этот подход, вы могли бы выиграть от объявления псевдонимов некоторых типов для сокращения этого имени типа контейнера.
Конечно, я могу только догадываться о логическом значении ваших контейнеров, и это еще одна вещь, которую это исправляет!
using PhilosopherNameType = std::string;
using NeighboursType = std::set<PhilosopherNameType>;
using NeighbourMapType = std::map<PhilosopherNameType, NeighboursType>;
std::vector<NeighbourMapType> table;
table.push_back(NeighbourMapType());
Я упоминаю об этом, потому что вы, вероятно, все еще можете извлечь выгоду из этого в других местах.