Untitled

 avatar
unknown
plain_text
a year ago
2.6 kB
9
Indexable
	void assign( K const& keyBegin, K const& keyEnd, V const& val ) 
    {
        if (m_map.empty())
        {
            if (!(val == m_valBegin))
            {
                m_map.insert_or_assign(keyBegin, val);                
                m_map.insert_or_assign(keyEnd, m_valBegin);
            }
        }
        else if ((--m_map.end())->first < keyBegin)
        {
            if (!(val == m_valBegin))
            {
                m_map.insert_or_assign(keyBegin, val);                
                m_map.insert_or_assign(keyEnd, m_valBegin);
            }
        }
        else if (!(m_map.begin()->first < keyBegin))
        {
            if (val == m_valBegin)
            {
                V tempval = (--m_map.upper_bound(keyEnd))->second;
                if (m_map.lower_bound(keyBegin) != --(m_map.lower_bound(keyEnd)))
                {
                    m_map.erase(m_map.upper_bound(keyBegin), m_map.lower_bound(keyEnd));
                    m_map.insert_or_assign(keyEnd, tempval);
                }
            }
            
            else
            {
                V tempval = (--m_map.upper_bound(keyEnd))->second;
                m_map.insert_or_assign(keyBegin, val);
                if(m_map.lower_bound(keyBegin) != --(m_map.lower_bound(keyEnd))){
                    m_map.erase(m_map.upper_bound(keyBegin), m_map.lower_bound(keyEnd));
                    if(!(tempval == val)){
                        m_map.insert_or_assign(keyEnd, tempval);
                    }
                }
                else
                {
                    m_map.insert_or_assign(keyEnd, m_valBegin);
                }
            }
        }
        else 
        {
            V beginTempVal = (--m_map.upper_bound(keyBegin))->second;
            V tempval = (--m_map.upper_bound(keyEnd))->second;

            if (beginTempVal != val)
            {
                m_map.insert_or_assign(keyBegin, val);
            }
            if ((m_map.lower_bound(keyBegin) == (m_map.lower_bound(keyEnd))) && beginTempVal == val) {}        
            else if((m_map.lower_bound(keyBegin) == (m_map.lower_bound(keyEnd))) && beginTempVal != val)
            {
                m_map.insert_or_assign(keyEnd, beginTempVal);
            }
            else
            {
                m_map.erase(m_map.upper_bound(keyBegin), m_map.lower_bound(keyEnd));
                if(!(tempval == val)){
                    m_map.insert_or_assign(keyEnd, tempval);
                }
            }
        }
    }
Editor is loading...
Leave a Comment