对wstrings的矢量进行排序,但不区分大小写

时间:2017-08-03 17:05:06

标签: c++ string sorting vector

使用以下内容对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小写的副本,并对第二个向量进行排序不会很好想法?)

1 个答案:

答案 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语言环境。