Untitled
unknown
plain_text
9 months ago
1.9 kB
10
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