Я полагаю, что ваш вектор "токенов" содержит имя с индексом 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» позволяет избежать выброса исключения std :: out_of_range в случае, если вектор «tokens» имеет ключ (по нечетному индексу) ) но без значения (по четному индексу).
Использование метода std :: map :: insert () вставляет новую пару ключ / значение , только если ключ еще не существует на карте. Другой способ вставить пару ключ / значение в карту и переопределить значение, если ключ уже существует , - использовать оператор [] , например, так:
block.params[key] = value;
Дополнительные примечания:
- Оптимизация компилятора должна избавить от шага создания ссылок и напрямую передавать векторные значения «токенов» в метод std :: map :: insert (), избегая лишних накладных расходов, создавая бесполезные, но увеличивающиеся ссылки на читаемость. .