使用以下内容对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
,但我不知道如何。
(因为我正在寻找一种有效的排序,能够在短时间内在数百万的绳索上进行,我认为暂时存储所有wstrings小写的副本,并对第二个向量进行排序不会很好想法?)
答案 0 :(得分:4)
但没有任何成功,因为tolower只能使用char / wchar_t。
您想要std::ctype<wchar_t>::tolower
:
JPQL
或者,您可以使用towlower
而不是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);
});
});
来使用当前(全局)std::ctype<wchar_t>::tolower
语言环境。