Boost.Locale provides a collator class, derived from
std::collate, that adds support for primary, secondary, tertiary, quaternary and identical comparison levels. They can be approximately defined as:
wstring a=L"Façade", b=L"facade"; bool eq = 0 == use_facet<collator<wchar_t> >(loc).compare(collator_base::secondary,a,b); wcout << a <<L" and "<<b<<L" are " << (eq ? L"identical" : L"different")<<endl;
std::locale is designed to be useful as a comparison class in STL collections and algorithms. To get similar functionality with comparison levels, you must use the comparator class.
std::map<std::string,std::string,comparator<char,collator_base::secondary> > strings; // Now strings uses the default system locale for string comparison
You can also set a specific locale or level when creating and using the comparator class:
comparator<char> comp(some_locale,some_level); std::map<std::string,std::string,comparator<char> > strings(comp);