STL mapの効率的な挿入と更新


#include
#include
#include
#include
#include
#include
#include

using namespace std;

template<typename MapType,              // map   
        typename KeyArgType,        // KeyArgType ValueArgtype
        typename ValueArgtype>      //      
                        //        
typename MapType::iterator
    efficientAddOrUpdate(MapType& m,
                const KeyArgType& k,
                const ValueArgtype& v)
{
    typename MapType::iterator Ib =         //   k       ;
        m.lower_bound(k);               //      
                            //   “typename”
                            //    7 
    if(Ib != m.end() &&             //   Ib    pair
        !(m.key_comp()(k, Ib->first))) {        //       k...
            Ib->second = v;         //     pair  
            return Ib;          //      pair 
        }                   //    
        else{
            typedef typename MapType::value_type MVT;
            return m.insert(Ib, MVT(k, v)); //  pair(k, v)   m 
        }                   //      map   
}                           //    

int main()
{

    map<int,int> m;
    m[0]=0;
    m[1]=1;
    m[2]=2;
    m[4]=4;

    efficientAddOrUpdate(m,4,3);
    efficientAddOrUpdate(m,3,3);

    cout<3]<cout<4]<return 0;
}