Внутри каждой итерации цикла вы можете проверить, совпадает ли итератор следующий с итератором end()
карты, например:
static void stringify(map<string, string> data)
{
string base;
base += "{ ";
auto it = data.begin();
auto end = data.end();
while (it != end)
{
auto next_it = std::next(it);
if (next_it == end) {
cout << "this is the last iteration!" << endl;
}
cout << it->first << " => " << it->second << endl;
it = next_it;
}
}
Или:
static void stringify(map<string, string> data)
{
string base;
base += "{ ";
auto it = data.begin();
auto end = data.end();
if (it != end)
{
do
{
cout << it->first << " => " << it->second << endl;
auto next_it = std::next(it);
if (next_it == end) {
cout << "that was the last iteration!" << endl;
break;
}
it = next_it;
}
while (true);
}
}
Если ваша цель - просто не вставлять запятую в вывод JSON на первой или последней итерации (в зависимости от того, где в вашем коде вы хотите выполнить эту вставку), вы можете сделать это следующим образом:
static void stringify(map<string, string> data)
{
string base = "{";
auto it = data.begin();
auto end = data.end();
if (it != end)
{
cout << it->first << " => " << it->second << endl;
base += (" \"" + it->first + "\": \"" + it->second + "\"");
while (++it != end)
{
cout << it->first << " => " << it->second << endl;
base += (", \"" + it->first + "\": \"" + it->second + "\"");
}
}
base += " }";
}