Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- if (it==end())
- throw std::out_of_range("Out of Map range!");
- Node *toRemove=it.getNode();
- if (toRemove->left==nullptr && toRemove->right==nullptr)
- {
- if (toRemove==root)
- root=nullptr;
- else if (toRemove->kv->first<toRemove->parent->kv->first)
- toRemove->parent->left=nullptr;
- else
- toRemove->parent->right=nullptr;
- delete toRemove;
- }
- else if (toRemove->left==nullptr)
- {
- if (toRemove==root)
- {
- root=root->right;
- root->parent=nullptr;
- }
- else if (toRemove->kv->first<toRemove->parent->kv->first)
- toRemove->parent->left=toRemove->right;
- else
- toRemove->parent->right=toRemove->right;
- delete toRemove;
- }
- else if (toRemove->right==nullptr)
- {
- if (toRemove==root)
- {
- root=root->left;
- root->parent=nullptr;
- }
- else if (toRemove->kv->first<toRemove->parent->kv->first)
- toRemove->parent->left=toRemove->left;
- else
- toRemove->parent->right=toRemove->left;
- delete toRemove;
- }
- else
- {
- Node* change=toRemove->right;
- while (change->left!=nullptr)
- change=change->left;
- std::swap<value_type*>(toRemove->kv, change->kv);
- remove(change->kv->first);
- }
- --tm_size;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement