Вы не можете сделать это со стандартной картой.Но если ваша проблема настолько специфична, вы можете рассмотреть возможность передачи нового элемента отдельно:
void doSmth1(std::map<int, int> const & m, int newkey, int newvalue);
void doSmth2(std::map<int, int> const & m)
{
doSmth1(m, 42, 47);
}
Обновление: Если вы действительно просто хотите одну карту, и копирование картыне может быть и речи, вот как можно реализовать предложение @ arrowdodger о временном изменении исходной карты:
void doSmth2(std::map<int, int> & m)
{
auto it = m.find(42);
if (it == m.end())
{
m.insert(std::make_pair(42, 49));
doSmth1(m);
m.erase(42);
}
else
{
auto original = it->second;
it->second = 49;
doSmth1(m);
it->second = original;
}
}