提问人:Haoshu 提问时间:10/11/2022 更新时间:10/11/2022 访问量:77
std 中是否有类/结构可以不区分大小写地比较字符串,并且可以用作 std::map 中的 Compare 模板?
Is there a class/struct in std that compares strings case insensitively and can be used as the Compare template in std::map?
问:
要创建一个不区分大小写的键,我们可以定义一个 ,并在定义 .std::map
string
struct CaseInsensitiveCompare
Compare
map
template<class T>
struct CaseInsensitiveCompare
{
bool operator() (const T& l, const T& r) const
{
return std::lexicographical_compare(l.begin(), l.end(), r.begin(), r.end(), [](auto l, auto r) { return std::tolower(l, std::locale()) < std::tolower(r, std::locale()); });
}
};
std::map<std::string, int, CaseInsensitiveCompare<std::string>> caseInsensitiveMap;
但是,每当我们需要不区分大小写的映射时,我们都需要定义一个。有什么东西是等价的吗?或者有没有其他方法可以在没有额外结构的情况下定义不区分大小写的映射?struct CaseInsensitiveCompare
std
struct CaseInsensitiveCompare
答: 暂无答案
评论
char_trait
可能是一种替代方法,请参阅 gotw.ca/gotw/029.htm