对字符串向量进行排序,但不区分大小写
Sort a vector of wstrings, but case insensitive
当对wstring
s 的向量进行排序时:
vector<wstring> v;
v.push_back(L"zzz");
v.push_back(L"BBB");
v.push_back(L"aaa");
sort(v.begin(), v.end());
结果是BBB,aaa,zzz。如何使大小写不区分的排序?
我试过
sort(v.begin(), v.end(),
[](wstring lhs, wstring rhs) { return tolower(lhs) < tolower(rhs); });
但没有任何成功,因为tolower
仅适用于 char/wchar_t,而不适用于 wstring。
我可能不得不使用lexicographical_compare
但我看不出如何。
(由于我正在寻找一种有效的排序,能够在短时间内对数百万个字符串进行排序,我认为临时存储所有小写字符串的副本,并对第二个向量进行排序不是一个好主意?
但没有任何成功,因为 tolower 只工作 char/wchar_t。
你想要std::ctype<wchar_t>::tolower
:
auto& f = use_facet<ctype<wchar_t>>(locale());
sort(v.begin(), v.end(), [&f](wstring const& a, wstring const& b) {
return lexicographical_compare(a.begin(), a.end(), b.begin(), b.end(), [&f](wchar_t ai, wchar_t bi) {
return f.tolower(ai) < f.tolower(bi);
});
});
或者,您可能希望使用使用当前(全局(C
区域设置的towlower
而不是std::ctype<wchar_t>::tolower
。
相关文章:
- 使字母检查不区分大小写
- 如何执行不区分大小写的字符串比较?
- CMake 添加不区分大小写的源文件
- 提升program_option配置文件的不区分大小写的解析
- 如何提升Perl正则表达式匹配,支持区分大小写/不区分大小写
- 对字符串向量进行排序,但不区分大小写
- 比较最后一个字符,不区分大小写(带谓词?
- 在字符串的 boost::unordered_set 中使用 Lambda 函数 - 不区分大小写
- 为什么不区分大小写适用于 std::unordered_set的 std::hash 函数?
- 如何使字符串中的每个字母不区分大小写
- 不区分大小写的字符串
- 使 strcmp() 不区分大小写而不使用 strcmpi() (C++)
- 是否有函数/WinAPI 可以判断一个字符串是否以不区分大小写的语言方式以另一个字符串开头?
- 极快的is_iequal?(不区分大小写的相等比较)
- C++,检查两个字符串的不区分大小写相等
- 在字符串向量中查找字符串,不区分大小写的c++
- 如何在C++中实现unicode不区分大小写的比较
- 不区分大小写的操作
- ICU:创建不区分大小写的排序规则
- 内置C++函数,使两个字符串的比较不区分大小写