簡體   English   中英

排序向量的wstrings,但不區分大小寫

[英]Sort a vector of wstrings, but case insensitive

使用以下命令對wstring的向量進行排序時:

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但我不知道如何。

(由於我正在尋找一種有效的排序方式,能夠在短時間內對數百萬個wstring進行排序,因此我認為暫時將所有wstring的副本都以小寫形式存儲,然后對第二個向量進行排序不是一個好主意嗎?)

但沒有成功,因為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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM