我正在尝试使用std::vector<tokens>
中保存的某些数据来初始化结构-令牌只是字符串。我的结构是:
struct parsedBlock{
std::string name;
std::map<std::string, std::string> params;
}
parsedBlock block;
令牌[0]是block.name,因此只需编写block.name = tokens[0]
就很简单
但是问题是,假设键为tokens[i]
且值为tokens[i+1]
,如何初始化params字段。提前致谢。问候!
答案 0 :(得分:1)
我猜您的“令牌”向量包含索引0处的名称作为特殊值,并且所有后续值都是您在“ params”映射中想要的键/值。
措辞不同,奇数索引(1、3、5等)是“ params”映射的键,偶数索引(2、4、6等)-除0以外是“ params”的值“地图。
假设您的“令牌”向量正确,则可以执行以下操作:
for (int i = 1; i < (tokens.size() - 1); i += 2) {
std::string& key = block.params[i];
std::string& value = block.params[i + 1];
block.params.insert(std::pair<std::string, std::string>(key, value));
}
使用(tokens.size()-1)作为最大的“ i”,以确保在“ tokens”向量具有键(在奇数索引上)的情况下,不会抛出std :: out_of_range异常),但没有值(在偶数索引上)。
使用std :: map :: insert()方法确实会在地图中不存在新键的情况下插入新键/值对。在地图中插入键/值对并在键已经存在时覆盖值的另一种方法是使用 []运算符,如:
block.params[key] = value;
附加说明: