当我们在C++中使用复杂的容器时,例如
std::vector<std::map<std::string, std::set<std::string>>> table;
添加空映射(可能表示行或列(的唯一方法是初始化一个新元素并将其推回。例如
table.push_back(std::map<std::string, std::set<std::string>>());
有没有办法避免重新声明类型,而只添加正确的类型元素?
从 CLion 的 IntelliSense 中,我后来发现一个有用的方法是emplace_back()
。这将构造一个正确类型的新对象,并将其添加到向量的末尾。
table.emplace_back();
你可以利用复制列表初始化(从 C++11 开始(并编写
table.push_back({});
在 C++11 之前有时我会使用 x.resize(x.size()+1)
,在 C++11 或更高版本中您可以使用 x.push_back({})
。
尽管其他答案是正确的,但我要补充一点,如果您不能采用这种方法,则可以从声明某些类型别名来缩短该容器类型名称中受益。
我当然只能猜测您的容器的逻辑含义,这是解决的另一件事!
using PhilosopherNameType = std::string;
using NeighboursType = std::set<PhilosopherNameType>;
using NeighbourMapType = std::map<PhilosopherNameType, NeighboursType>;
std::vector<NeighbourMapType> table;
table.push_back(NeighbourMapType());
我提到这一点是因为你可能仍然可以在其他地方从中受益。