테스트

템플릿을 이용한 람다 활용 [-] Collapse
#pragma once
#include <map>

template<class T_KEY, class T_VALUE>
class TsMapT
{
public:
    typedef std::map<T_KEY, T_VALUE> TMap;

public:
    template<typename FUNC>
    void For_Each(FUNC func)
    {
        for(TMap::iterator iter=m_container.begin(); iter!=m_container.end(); ++iter)
        {
            func(iter);
        }
    }

    bool Register(T_KEY const &rKey, T_VALUE const &rValue)
    {
        return m_container.insert(std::make_pair(rKey, rValue)).second;
    }

    bool UnRegister(T_KEY const &rKey)
    {
        auto iter = m_container.find(rKey);
        if( m_container.end() != iter )
        {
            m_container.erase(iter);
            return true;
        }
    }

    T_VALUE const& Get(T_KEY const &rKey) const
    {
        auto iter = m_container.find(rKey);
        if( m_container.end() != iter )
        {
            return iter->second;
        }

        return nullptr;
    }

    T_VALUE& Get(T_KEY const &rKey)
    {
        auto iter = m_container.find(rKey);
        if( m_container.end() != iter )
        {
            return iter->second;
        }

        return nullptr;
    }

    size_t Size()
    {
        return m_container.size();
    }

private:
    TMap    m_container;
};



int _tmain(int argc, _TCHAR* argv[])
{
    typedef TsMapT<int, int> OBJ_TYPE;

    OBJ_TYPE obj;

    // insert
    for(int i=0; i<100; ++i)
    {
        obj.Register(i, i+100);
    }

    // print all
    obj.For_Each( [=](OBJ_TYPE::TMap::iterator& iter)
    {
        ::printf("key : %d, value : %d\n", iter->first, iter->second);
    });

    return 0;
}


1 2 3 4 5 6 7 8 9 10 다음