Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 向量算法中的字符串排序不起作用_C++_Function_Sorting - Fatal编程技术网

C++ 向量算法中的字符串排序不起作用

C++ 向量算法中的字符串排序不起作用,c++,function,sorting,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.typ

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

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;
}
矢量分类器;
std::sort(sorter.begin()、sorter.end()、SortHelp);
//预置函数
bool SortHelp(项目常数和一、项目常数和二)
{
返回1.type<2.type;
}
*type是我用来排序的字符串

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

如中所述,
strcasecmp()
将在比较
const char*
字符串时提供正确答案


如果比较C++字符串,则升压库有<代码> ISILILSER()/CUT>,其中头是由.< /P>< P>建议的。下面的函数将对两个代码> STD::String < /Cult> s进行不区分大小写的比较,没有外部库(虽然是C++ 11)。p>

bool caseinsensitivecompare(字符串s1、字符串s2){
地点loc;
std::transform(s1.begin()、s1.end()、s1.begin(),
[loc](charc){return std::toupper(c,loc);};
std::transform(s2.begin()、s2.end()、s2.begin(),
[loc](charc){return std::toupper(c,loc);};
返回(s1
目前不起作用的是什么?您正在执行的操作应该已经按字母顺序进行了排序。请显示
项的定义。例如,如果
Item::type
const char*
,则此比较将不起作用。此外,为了确保得到答案,最好是发布一个复制错误的最小工作示例。是的,它从字符串更改为char[16],示例输出为:成分、武器、盔甲、武器。。。那么我如何比较字符数组来确定哪个应该在哪里?@AC101您不清楚的是什么?使用
strcasecmp()
,就像Simon说的那样(通过google或linux上的
man 3 strcasecmp
)编写文档)。
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);
}