Untitled

 avatar
unknown
plain_text
a month ago
1.9 kB
8
Indexable
	    
        if (!(keyBegin < keyEnd)) return;
        
        if (m_map.empty()) {
            m_map.insert(std::pair<K,V>(keyBegin, val));
            m_map.insert(std::pair<K,V>(keyEnd, m_valBegin));
            return;
        }

        auto itBegin = m_map.lower_bound(keyBegin);
        auto itBeginTmp = itBegin;
        
        V valCurr = itBeginTmp->second;
        if (keyBegin < itBeginTmp->first) {
            if (itBeginTmp == m_map.begin()) {
                valCurr = m_valBegin;
            } else {
                valCurr = (--itBeginTmp)->second;
            }
        }
        auto itDelBegin = m_map.insert(itBegin, std::pair<K,V>(keyBegin, val));
        if (itDelBegin == m_map.begin()) {
            if (!(val == m_valBegin)) {
                ++itDelBegin;
            }
        } else {
            if (!((--itDelBegin)->second == val)) {
                ++itDelBegin;
            }
            ++itDelBegin;
        }
        auto itCurr = itDelBegin;
        while (itCurr != m_map.end()) {
            if (keyEnd < itCurr->first) {
                break;
            }
            valCurr = itCurr->second;
            itCurr = m_map.erase(itCurr);
        }
        auto itInsBegin = m_map.insert_or_assign(itCurr, keyBegin, val);
        auto itInsBeginTmp = itInsBegin; 
        if (!(itInsBegin == m_map.begin()) && (--itInsBeginTmp)->second == itInsBegin->second) {
            m_map.erase(itInsBegin);
        }
        auto itEnd = m_map.insert(itCurr, std::pair<K,V>(keyEnd, valCurr));
        auto itEndTmp = itEnd;
        if ((itEnd != m_map.end()) && ((++itEnd)->second == valCurr)) {
            m_map.erase(itEnd);
        }
        if ((--itEndTmp)->second == valCurr) {
            m_map.erase(++itEndTmp);
        }
        if (m_map.size() == 1 && m_map.begin()->second == m_valBegin) {
            m_map.erase(m_map.begin());
        }
Editor is loading...
Leave a Comment