Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 2 3 4 [5]   Вниз
  Печать  
Автор Тема: Подскажите с STL  (Прочитано 42624 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Алексей++
кот глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #120 : 15-02-2011 08:00 » 

хех, а применить lower_bound для мапы как-то и не выходит. В качестве значения , по идее, нужно value_type ставить, а как его сделать для несуществующего ключа ?

вот так не получается (td_map - определённый тип мапа)
td_map::value_type(A,td_map::mapped_type())
Записан

Алексей++
кот глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #121 : 15-02-2011 08:11 » 

вот так оставил
Код:
bool GetFirstEmptyKey(int A,int B,int& result)
{
result=0;

if(m_map.empty())
{
result=A;
return true;
}

td_map::const_iterator it;
const int* prevKey=0;

for(it=m_map.begin(); it!=m_map.end(); it++)
{
if(it->first<A)continue;
if(it->first>B)break;//вышли из диапазона

if(prevKey)
{
if(*prevKey<it->first-1)
{
result=it->first-1;
return true;
}
}

prevKey=&it->first;
}

if(prevKey)
{
if(*prevKey+1<Bl)
{
result=*prevKey+1;
return true;
}
}

return false;
}
« Последнее редактирование: 15-02-2011 08:59 от Алексей1153++ » Записан

Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #122 : 15-02-2011 09:31 » 

у меня получилось, как-то так
Код: (C++)
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;
}
« Последнее редактирование: 15-02-2011 09:33 от Антон (LogRus) » Записан

Странно всё это....
Страниц: 1 2 3 4 [5]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines