у меня получилось, как-то так
bool GetFirstEmptyKey(int A,int B, int& result)
{
result = A;
if (A == B) // пустой диапазон
return false;
td_map::const_iterator it = m_map.lower_bound(A);
if (it == m_map.end() || it->first > A) // свободная касса
return true;
int prev_val = it->first;
for(; it!=m_map.end() && it->first < B; ++it)
{
if (prev_val + 1 < it->first)
{
result = prev_val + 1;
return true;
}
prev_val = it->first;
}
++prev_val;
if ( (it!=m_map.end() && prev_val < it->first) || (it==m_map.end() && prev_val < B))
{
result = prev_val;
return true;
}
return false;
}