Это не по умолчанию. Вы должны будете предоставить собственный компаратор в качестве третьего аргумента. Следующий фрагмент поможет вам ...
/************************************************************************/
/* Comparator for case-insensitive comparison in STL assos. containers */
/************************************************************************/
struct ci_less : std::binary_function<std::string, std::string, bool>
{
// case-independent (ci) compare_less binary function
struct nocase_compare : public std::binary_function<unsigned char,unsigned char,bool>
{
bool operator() (const unsigned char& c1, const unsigned char& c2) const {
return tolower (c1) < tolower (c2);
}
};
bool operator() (const std::string & s1, const std::string & s2) const {
return std::lexicographical_compare
(s1.begin (), s1.end (), // source range
s2.begin (), s2.end (), // dest range
nocase_compare ()); // comparison
}
};
Используйте это как std::map< std::string, std::vector<std::string>, ci_less > myMap;
ПРИМЕЧАНИЕ : std :: lexicographic_compare содержит некоторые подробности. Сравнение строк не всегда просто, если учитывать локали. Смотрите эту ветку на c.l.c ++, если интересно.
ОБНОВЛЕНИЕ : С C ++ 11 std::binary_function
устарело и не требуется, поскольку типы выводятся автоматически.
struct ci_less
{
// case-independent (ci) compare_less binary function
struct nocase_compare
{
bool operator() (const unsigned char& c1, const unsigned char& c2) const {
return tolower (c1) < tolower (c2);
}
};
bool operator() (const std::string & s1, const std::string & s2) const {
return std::lexicographical_compare
(s1.begin (), s1.end (), // source range
s2.begin (), s2.end (), // dest range
nocase_compare ()); // comparison
}
};