Я бы использовал подготовленный MySQL API для этого.
Вы можете увидеть полный пример здесь .
Вы бы просто зациклились на векторе, привязав его к новым значениям и повторно выполнив оператор. Это, вероятно, будет более эффективным и менее подверженным ошибкам (труднее пострадать от атак типа SQL-инъекций), чем создание и повторный запуск запроса вручную.
Другой вариант (не такой хороший IMO, но более простой и может страдать от проблем с внедрением sql, если вы не будете осторожны), состоит в том, чтобы перебрать вектор, создающий запрос в потоке строки, а затем использовать буфер потока строки.
Метод строкового потока выглядит примерно так (непроверенный и, вероятно, глючный):
vector<pair<string,int> > values = get_my_values();
stringstream query;
query<<"insert into test values";
for( vector<pair<string,int> >::iterator it = values.begin() ;
it != values.end();
++it )
{
query<<"(\""<<mysql_real_escape(connection, it->first.c_str())<<"\","<<it->second<<")";
if( it+1 != values.end() ) { query<<","; }
}
query_state=mysql_query(connection, query.str().c_str() );