Untitled
unknown
plain_text
7 months ago
1.1 kB
5
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