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