C++ map comparator: In the previous article, we have discussed about C++ std::list Tutorial, Example and Usage Details. Let us learn Map Tutorial -Part 2 in C++ Program.
Map Tutorial -Part 2:: Map and External Sorting Criteria/Comparator
Sorted map c++: In this article we will discuss how to use external sorting criteria/Comparator for keys in std::map
and points that we need to take care with external sorting criteria.
Default sorting criteria :
std::map
is a sorted associative container that contains key-value pairs with unique keys.
Let’s try with an example:
#include <iostream> #include <map> #include <string> #include <iterator> int main() { std::map<std::string, int> metals; metals["Rhodium"] = 1; metals["Platinum"] = 2; metals["Gold"] = 3; metals.insert(std::make_pair("Ruthenium", 4)); metals.insert(std::make_pair("Iridium", 5)); metals.insert(std::make_pair("Osmium", 6)); metals.insert(std::make_pair("Palladium", 7)); metals.insert(std::make_pair("Rhenium", 8)); metals.insert(std::make_pair("Silver", 9)); metals.insert(std::make_pair("Indium", 10)); std::map<std::string, int>::iterator it = metals.begin(); for( ; it != metals.end(); it++) std::cout<<it->first<<" :: "<<it->second<<std::endl; return 0; }
Output : Gold :: 3 Indium :: 10 Iridium :: 5 Osmium :: 6 Palladium :: 7 Platinum :: 2 Rhenium :: 8 Rhodium :: 1 Ruthenium :: 4 Silver :: 9
The elements in output are in lexicographical order(dictionary order or alphabetical order).
External sorting criteria i.e Comparator :
C++ ordered map: Let’s try with an example:
#include <iostream> #include <map> #include <string> #include <iterator> #include <string> #include <iterator> struct metalComparator { bool operator()(const std::string & left, const std::string & right) const { return (left > right); } }; int main() { std::map<std::string, int, metalComparator > metals; metals["Rhodium"] = 1; metals["Platinum"] = 2; metals["Gold"] = 3; metals.insert(std::make_pair("Ruthenium", 4)); metals.insert(std::make_pair("Iridium", 5)); metals.insert(std::make_pair("Osmium", 6)); metals.insert(std::make_pair("Palladium", 7)); metals.insert(std::make_pair("Rhenium", 8)); metals.insert(std::make_pair("Silver", 9)); metals.insert(std::make_pair("Indium", 10)); for(std::map<std::string, int>::iterator it = metals.begin(); it != metals.end(); it++) std::cout<<it->first<<" :: "<<it->second<<std::endl; return 0; }
Output: Silver :: 9 Ruthenium :: 4 Rhodium :: 1 Rhenium :: 8 Platinum :: 2 Palladium :: 7 Osmium :: 6 Iridium :: 5 Indium :: 10 Gold :: 3
With different external key sorting criteria :
How to sort a map c++: We can compare two std::map objects using operator ==, <, >, !=, etc.
Let’s try with an example:
#include <iostream> #include <map> #include <string> #include <iterator> struct metalComparator { bool operator()(const std::string & left, const std::string & right) const { return (left > right); } }; int main() { std::map<std::string, int > metals; metals["Rhodium"] = 1; metals["Platinum"] = 2; metals["Gold"] = 3; metals.insert(std::make_pair("Ruthenium", 4)); metals.insert(std::make_pair("Iridium", 5)); metals.insert(std::make_pair("Osmium", 6)); metals.insert(std::make_pair("Palladium", 7)); metals.insert(std::make_pair("Rhenium", 8)); metals.insert(std::make_pair("Silver", 9)); metals.insert(std::make_pair("Indium", 10)); std::map<std::string, int>::iterator it = metals.begin(); for( ; it != metals.end(); it++) std::cout<<it->first<<" :: "<<it->second<<std::endl; std::cout<<"External sorting criteria for keys "<<std::endl; std::map<std::string, int, metalComparator > metals_2; for(std::map<std::string, int>::iterator it = metals_2.begin(); it != metals_2.end(); it++) std::cout<<it->first<<" :: "<<it->second<<std::endl; return 0; }
Output : Gold :: 3 Indium :: 10 Iridium :: 5 Osmium :: 6 Palladium :: 7 Platinum :: 2 Rhenium :: 8 Rhodium :: 1 Ruthenium :: 4 Silver :: 9 External sorting criteria for keys