2013-02-10 66 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