mercredi 15 avril 2015

Passing map with custom comparator to function

I have an STL map with a custom comparator which I want to pass to a function, but the function doesn't recognize the custom comparator.


Trying to access the map within the main function works.


I have listed both attempts in my code.



#include <iostream>
#include <string>
#include <map>

// Error: cmpByStringLength is not recognized (both times)
void funcOut(std::map<std::string, int, cmpByStringLength> myMap)
{
for (std::map<std::string, int, cmpByStringLength>::iterator it = myMap.begin(); it != myMap.end(); ++it)
{
std::cout << it->first << " => " << it->second << std::endl;
}
}

int main()
{
// Reverse sort by length
struct cmpByStringLength {
bool operator()(const std::string& a, const std::string& b) const {
return a.length() > b.length();
}
};

std::map<std::string, int, cmpByStringLength> myMap;
myMap.emplace("String 1", 5);
myMap.emplace("String 123", 10);

funcOut(myMap);

// Working
for (std::map<std::string, int, cmpByStringLength>::iterator it = myMap.begin(); it != myMap.end(); ++it)
{
std::cout << it->first << " => " << it->second << std::endl;
}
return 0;
}

Aucun commentaire:

Enregistrer un commentaire