在C++中初始化向量映射的最有效方法



初始化设置为相同值的固定大小的向量映射(第一个值除外(的最有效方法是什么?

例如,假设它是字符串到布尔向量的映射:

std::map<std::string, std::vector<bool>> map;

我可以想到两种方法:

for (const std::string& key : {"key1", "key2", "key3"}) {
map[key] = std::vector<bool>(10, false); // Initialize to length of 10 and set all to false
map[key][0] = true;  
}

for (const std::string& key : {"key1", "key2", "key3"}) {
std::vector<bool>& vec = map[key]; // Default initialization to empty vector
vec.insert(vec.begin(), 10, false); // insert 10 elements 
vec[0] = true;  
}

第二个避免了双重查找,但需要更多的代码行和额外的向量初始化。有没有比上面两个更简洁的方法?

做一个临时vector<bool>

std::vector<bool> vb(10, false);
vb[0] = true;
for (const std::string& key : {"key1", "key2", "key3"})
map[key] = b;

请注意,您的原始代码k您应该使用key

这是一个非常简洁的解决方案:

std::vector<bool> vb(10, false);
vb[0] = true;
std::map<std::string, std::vector<bool>> map{{"key1", vb},{"key2", vb},{"key3", vb}};

最新更新