как с удалить из std::map
От: Аноним  
Дата: 05.11.04 13:59
Оценка:
Есть std::map.
Как удалить из него элементы, удовлетворяющие условию ?
Что-то типа
bool IsForRemove ( std::pair ) 
{
...
}
...
it = std::remove_if
    ( 
        map.begin() , 
        map.end() , 
        IsForRemove
    ) ;
Re: как с удалить из std::map
От: NKZ  
Дата: 05.11.04 14:02
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Как удалить из него элементы, удовлетворяющие условию ?

здесь
Автор: Wind
Дата: 28.10.04
... << RSDN@Home 1.1.4 beta 3 rev. 0>>
Re[2]: как с удалить из std::map
От: Аноним  
Дата: 05.11.04 14:12
Оценка:
Здравствуйте, NKZ, Вы писали:

Я не правильно сформулировал вопрос.
Как изящьно удалить без использования цикла.
Re[3]: как с удалить из std::map
От: Bell Россия  
Дата: 05.11.04 14:32
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, NKZ, Вы писали:


А>Я не правильно сформулировал вопрос.

А>Как изящьно удалить без использования цикла.

Написать специализированный алгоритм, который этот цикл скроет.
Любите книгу — источник знаний (с) М.Горький
Re[4]: как с удалить из std::map
От: Аноним  
Дата: 05.11.04 14:48
Оценка:
Здравствуйте, Bell, Вы писали:

B>Здравствуйте, Аноним, Вы писали:


А>>Здравствуйте, NKZ, Вы писали:


А>>Я не правильно сформулировал вопрос.

А>>Как изящьно удалить без использования цикла.

B>Написать специализированный алгоритм, который этот цикл скроет.

А нет ли готовго?
Например, приведенный мной код отлично работает для std::set
Re[5]: как с удалить из std::map
От: Bell Россия  
Дата: 05.11.04 14:52
Оценка:
Здравствуйте, Аноним, Вы писали:

А> А нет ли готовго?

А>Например, приведенный мной код отлично работает для std::set

std::remove_if работает для std::set? Нельзя ли взглянуть на это чудо?
Любите книгу — источник знаний (с) М.Горький
Re[4]: как с удалить из std::map
От: NKZ  
Дата: 05.11.04 15:06
Оценка:
Здравствуйте, Bell, Вы писали:

B>Написать специализированный алгоритм, который этот цикл скроет.


Можно конечно попробовать, но то что получется, совсем не смотрится. Простой цикл, намного понятнее . Хотя если еще boost'а добавить, должно быть немного красивее.

#pragma once 

#include<string>
#include<map>

template <typename T>
struct CheckCondition
{
    typedef typename T::value_type Type;
    bool operator()(const Type& _type)
    {
        //condition
        return true;
    }
};

template <typename T>
struct Deleter
{
    typedef typename T::iterator Iterator;

    Deleter(T& container) : _container(container)
    {
    }
    void operator()(const Iterator iter)
    {
        _container.erase(iter);
    }

private:
    T& _container;
};


template <class ForwardIter, class Predicate, class Deleter>
void map_remove_if(ForwardIter first, ForwardIter last, Predicate pred, Deleter del) 
{
    for ( ;first != last;)
    {
         if (pred(*first))
            del(first++);
         else
            ++first;
    }
}



void Test()
{
    typedef std::map<std::string, std::string> STR_MAP;
    STR_MAP strMap;
    
    map_remove_if(strMap.begin(), strMap.end(), CheckCondition<STR_MAP>(), Deleter<STR_MAP>(strMap));

}
... << RSDN@Home 1.1.4 beta 3 rev. 0>>
Re[6]: как с удалить из std::map
От: Аноним  
Дата: 05.11.04 15:06
Оценка:
Здравствуйте, Bell, Вы писали:

B>Здравствуйте, Аноним, Вы писали:


А>> А нет ли готовго?

А>>Например, приведенный мной код отлично работает для std::set

B>std::remove_if работает для std::set? Нельзя ли взглянуть на это чудо?


Можно.
Я это привел в самом начале вопроса.
Re[7]: как с удалить из std::map
От: Bell Россия  
Дата: 05.11.04 15:11
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Можно.

А>Я это привел в самом начале вопроса.

Приведенный в начале псевдокод никак на чудо не тянет. Хотелось юы увидеть настоящий код.
Любите книгу — источник знаний (с) М.Горький
Re[8]: как с удалить из std::map
От: Carc Россия https://vk.com/gosha_mazov
Дата: 05.11.04 18:57
Оценка:
Здравствуйте, Bell, Вы писали:

B>Здравствуйте, Аноним, Вы писали:


А>>Можно.

А>>Я это привел в самом начале вопроса.

B>Приведенный в начале псевдокод никак на чудо не тянет. Хотелось юы увидеть настоящий код.

Я тоже хочу посмотреть.
2Bell — я лично чудо написал быстро, но потом переписывал полночи для того чтобы работало
Ничего изященее чем for_each(begin(),end()) и запоминанием ключей для удаления, к примеру в каком-нибудь векторе, а потом удалением их в цикле так и ну удалось изобрести
Aml Pages Home
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.