Untitled

 avatar
unknown
plain_text
a month ago
1.1 kB
4
Indexable
    if (!(keyBegin < keyEnd)) return;
    auto itBegin = m_map.lower_bound(keyBegin); //log(n)
    
    V valCurr = itBegin->second;
    
    if (keyBegin < itBegin->first) {
        if (itBegin == m_map.begin()) {
            valCurr = m_valBegin;
        } else {
            valCurr = (--itBegin)->second;
        }
    }
    
    auto itDelBegin = m_map.insert_or_assign(itBegin, 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 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);
    }
Editor is loading...
Leave a Comment