Vector算法中的字符串排序不起作用

时间:2013-02-10 02:02:19

标签: c++ function sorting

我有一个结构项的向量,里面有一个字符串。我试图通过按字母顺序在项目中包含字符串来对项目的向量进行排序...到目前为止,我有:

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;
}

* type是我用来排序的字符串

如何更改谓词函数以按字母顺序对字符串进行排序?

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:0)

根据Case insensitive string comparison C++ (2012)的建议,如果比较strcasecmp()字符串,const char *将提供正确的答案。

如果比较C ++字符串,Boost库会is_iless(),标题为here,如Case insensitive string comparison in C++ (2008)所示。