2013-02-10 60 views
1

我有一個向量中有一個字符串的結構項。我想通過在字母順序對項目內的字符串項的矢量排序......到目前爲止,我:向量算法中的字符串排序不起作用

vector<Item> sorter; 

std::sort(sorter.begin(), sorter.end(), SortHelp); 

//predcate function 
bool SortHelp(Item const& one, Item const& two) 
{ 
    return one.type < two.type; 
} 

*類型是我使用的排序

如何串我可以更改謂詞函數來按字母順序排序字符串嗎?

+2

這是什麼現在不起作用? – us2012 2013-02-10 02:04:25

+0

你在做什麼應該已經按字母順序排序。 – 2013-02-10 02:07:27

+1

請顯示'Item'的定義。例如。如果'Item :: type'是'const char *',這個比較將不起作用。 – Csq 2013-02-10 02:15:19

回答

2

下面的函數將在沒有外部庫的兩個std::string上進行不區分大小寫的比較(儘管它是C++ 11)。

bool caseinsensitivecompare(string s1, string s2) { 
    locale loc; 
    std::transform(s1.begin(),s1.end(),s1.begin(), 
        [loc](char c){return std::toupper<char>(c,loc);}); 
    std::transform(s2.begin(),s2.end(),s2.begin(), 
        [loc](char c){return std::toupper<char>(c,loc);}); 
    return (s1 < s2); 
} 
0

Case insensitive string comparison C++ (2012)所示,如果比較const char *字符串,則strcasecmp()將提供正確答案。

如果比較C++字符串,Boost庫具有is_iless(),其標頭爲here,如Case insensitive string comparison in C++ (2008)所示。

+0

是的,它從字符串改爲char [16],樣本輸出是:成分,武器,盔甲,武器......我怎麼能比較char數組,然後看看哪個應該是哪裏? – AC101 2013-02-10 02:44:05

+0

@ AC101什麼是你不清楚?使用'strcasecmp()',就像Simon說的那樣(文檔通過谷歌或者通過'man 3 strcasecmp'在linux上)。 – us2012 2013-02-10 03:22:49