Delete map c++: In the previous article, we have discussed about C++ : Map Tutorial Part 1: Usage Detail with examples. Let us learn Map: Erase Element by Key or Iterator or Range in C++ Program.
Deleting a Key-value Pair From Map
std map.erase: In this article we will discuss about 3 different ways how we can delete a key-value pair from map. So, let’s explore the concept.
3 overloaded version of erase() function to remove elements in std::map i.e.
Approach-1 : Erasing element by Key
Map erase c++: erase() function accepts the key and removes that key-value pair or element from that map whose key match with the passed key.
Synatx- size_type erase (const key_type& key);
Where,
- key represents the key to be deleted
- returns number of elements deleted as there is always unique key in map
- So, returns 1 if the key is deleted and 0 if key is not found
Let’s see the below code to understand it clearly of c++ map erase.
#include <iostream>
#include <map>
#include <string>
int main()
{
// sampleMap as map which contains string & int
// where strings are the keys and integers are the values
std::map<std::string, int> sampleMap = { { "A", 1 }, { "B", 2 },
{ "C", 3 }, { "D", 4 }, { "E", 4 }, { "F", 5 }, { "G", 6 } };
// Printing the map elements before erase
std::cout << "Map before erase" << std::endl;
for (auto elem : sampleMap)
std::cout << elem.first << " :: " << elem.second << std::endl;
// Deleting/Erasing the element from map with given key.
int result = sampleMap.erase("C");
// Checking if element is actually deleted from map or not
if(result == 1)
std::cout<<"Element associated with Key 'C' is deleted"<<std::endl;
else
std::cout<<"Element associated with Key 'C' is deleted"<<std::endl;
// Printing the map elements after erase
std::cout << "Map Entries After Deletion" << std::endl;
for (auto elem : sampleMap)
std::cout << elem.first << " :: " << elem.second << std::endl;
return 0;
}
Output : Map before erase A :: 1 B :: 2 C :: 3 D :: 4 E :: 4 F :: 5 G :: 6 Element associated with Key 'C' is deleted Map after erase A :: 1 B :: 2 D :: 4 E :: 4 F :: 5 G :: 6
Approach-2 : Erasing element by Iterator
erase() function accepts the Iterator and removes the element pointed by that iterator.
iterator erase (const_iterator position);
Where,
- iterator position is passed in erase() function
- If the iterator is found valid then it is removed
Let’s see the below code to understand it clearly.
#include <iostream>
#include <map>
#include <string>
int main()
{
// sampleMap as map which contains string & int
// where strings are the keys and integers are the values
std::map<std::string, int> sampleMap = { { "A", 1 }, { "B", 2 },
{ "C", 3 }, { "D", 4 }, { "E", 4 }, { "F", 5 }, { "G", 6 } };
// Printing the map elements before erase
std::cout << "Map before erase" << std::endl;
for (auto elem : sampleMap)
std::cout << elem.first << " :: " << elem.second << std::endl;
// Finding the iterator of element with key 'C'
std::map<std::string, int>::iterator it = sampleMap.find("C");
// Checkingh if iterator is valid.
if(it != sampleMap.end())
{
// If the iterator is valid or found then
// Delete the element pointed by iterator
sampleMap.erase(it);
std::cout<<"That key-value deleted"<<std::endl;
}
else
std::cout<<"That Key Not Found"<<std::endl;
// Printing the map elements after erase
std::cout << "Map after erase" << std::endl;
for (auto elem : sampleMap)
std::cout << elem.first << " :: " << elem.second << std::endl;
return 0;
}
Output : Map before erase A :: 1 B :: 2 C :: 3 D :: 4 E :: 4 F :: 5 G :: 6 That key-value deleted Map after erase A :: 1 B :: 2 D :: 4 E :: 4 F :: 5 G :: 6
Approach-3 : Erasing element by Iterator Range
erase() function accepts the Iterator range and deletes all the elements within that start and end range.
void erase( iterator start, iterator end );
Where,
- start represents start iterator position
- end represents end iterator position
Let’s see the below code to understand it clearly.
#include <iostream>
#include <map>
#include <string>
int main()
{
// sampleMap as map which contains string & int
// where strings are the keys and integers are the values
std::map<std::string, int> sampleMap = { { "A", 1 }, { "B", 2 },
{ "C", 3 }, { "D", 4 }, { "E", 4 }, { "F", 5 }, { "G", 6 } };
// Printing the map elements before erase
std::cout << "Map before erase" << std::endl;
for (auto elem : sampleMap)
std::cout << elem.first << " :: " << elem.second << std::endl;
// Creating an iterator pointing to start of map
std::map<std::string, int>::iterator it1 = sampleMap.begin();
// Creating an iterator pointing to start of map
std::map<std::string, int>::iterator it2 = sampleMap.begin();
// Increment Iterator
it2++;
// Increment Iterator
it2++;
// Itr2 is now pointing to 3rd element
it2++;
// Checking if iterator is valid.
if (it1 != sampleMap.end() && it2 != sampleMap.end())
{
// Deleting the element pointed by iterator
sampleMap.erase(it1, it2);
std::cout << "Elements Removed within range" << std::endl;
}
else
std::cout << "That Key Not Found" << std::endl;
std::cout << "Map Entries After Deletion" << std::endl;
// Printing the map elements
for (auto elem : sampleMap)
std::cout << elem.first << " :: " << elem.second << std::endl;
return 0;
}
Output : Map before erase A :: 1 B :: 2 C :: 3 D :: 4 E :: 4 F :: 5 G :: 6 Elements Removed within range Map Entries After Deletion D :: 4 E :: 4 F :: 5 G :: 6