#include <cctype>
bool case_insensitive_cmp(char lhs, char rhs)
{
    return std::toupper(lhs) < std::toupper(rhs);
}

#include <algorithm>
#include <string>
bool case_insensitive_string_cmp(const std::string& lhs, 
                                 const std::string& rhs)
{
  return std::lexicographical_compare(lhs.begin(), 
                                      lhs.end(),
                                      rhs.begin(),
                                      rhs.end(),
                                      case_insensitive_cmp);
}

#include <map>
#include <iostream>

int main()
{
  std::map<std::string,
           std::string,
           bool(*)(const std::string&, const std::string&)> 
    my_map(case_insensitive_string_cmp);

  my_map["Helloooo"] = "foo";
  my_map["HELLOOOO"] = "bar";
  std::cout << my_map["hellOOOO"] << std::endl;
}
