C++ 使用算法头对structArray进行排序
我已经看过了一些零运气的例子,但是我想执行一个非常简单的任务,我只想使用C++ 使用算法头对structArray进行排序,c++,algorithm,sorting,C++,Algorithm,Sorting,我已经看过了一些零运气的例子,但是我想执行一个非常简单的任务,我只想使用算法头对结构进行排序 struct MyStruct { int level; //sort according to this int m; char ks; }; int main() { MyStruct* ary = new MyStruct[SIZE]; sort(ary, ary + tota_stored); /
算法头对结构进行排序
struct MyStruct
{
int level; //sort according to this
int m;
char ks;
};
int main() {
MyStruct* ary = new MyStruct[SIZE];
sort(ary, ary + tota_stored); //this part
for (int j = 0; j <tota_stored; j++)
{
cout << ary[j].level<< ary[j].m<< ary[j].ks<< " \n"; //print sorted
}
return 0;
}
struct MyStruct
{
int-level;//根据以下内容进行排序
int m;
查尔克斯;
};
int main(){
MyStruct*ary=新的MyStruct[SIZE];
排序(ary,ary+tota_存储);//此部分
对于(intj=0;j,您可以给std::sort like指定一个谓词
std::vector<MyStruct> ary(SIZE);
std::sort(ary.begin(), ary.end(), [](auto a, auto b){return a.level < b.level;});
Compare comp
这里是我用lambda定义的谓词
有关lambda的更多信息,请点击此处
但是,如果像Michaël Roy建议的那样,您必须使用C++98,您可以使用“functor”(不确定名称)
struct compareStructOperator无{
布尔运算符()(常量MyStruct&a,常量MyStruct&b)常量{
返回a.level
您可以给std::sort like指定一个谓词
std::vector<MyStruct> ary(SIZE);
std::sort(ary.begin(), ary.end(), [](auto a, auto b){return a.level < b.level;});
Compare comp
这里是我用lambda定义的谓词
有关lambda的更多信息,请点击此处
但是,如果像Michaël Roy建议的那样,您必须使用C++98,您可以使用“functor”(不确定名称)
struct compareStructOperator无{
布尔运算符()(常量MyStruct&a,常量MyStruct&b)常量{
返回a.level
在c++11及更高版本中,您可以使用Antoine的基于lambda函数的解决方案。如果必须使用c++98,或者如果级别的
数据成员是比较结构数据的有意义的值,或者如果您希望进行大量比较,或者如果比较更复杂,您可以创建一个运算符来帮助排序结构值
struct MyStruct
{
int level; //sort according to this
int m;
char ks;
friend inline bool operator < (const Mystruct& a, const MysStruct& b)
{
return a.level < b.level;
}
};
int main()
{
MyStruct* ary = new MyStruct[SIZE];
size)t total_stored = SIZE;
sort(ary, ary + total_stored); // <-- operator < will be called.
for (int j = 0; j <tota_stored; j++)
{
cout << ary[j].level<< ary[j].m<< ary[j].ks<< " \n"; //print sorted
}
return 0;
}
struct MyStruct
{
int-level;//根据以下内容进行排序
int m;
查尔克斯;
友元内联布尔运算符<(常量Mystruct&a、常量Mystruct&b)
{
返回a.level 排序(ary,ary+存储的总数量)在c++11及更高版本中,您可以使用Antoine的基于lambda函数的解决方案。如果必须使用c++98,或者如果级别
数据成员是比较结构数据的有意义的值,或者如果您希望进行大量比较,或者如果比较更复杂,您可以创建一个运算符来帮助排序结构值。
struct MyStruct
{
int level; //sort according to this
int m;
char ks;
friend inline bool operator < (const Mystruct& a, const MysStruct& b)
{
return a.level < b.level;
}
};
int main()
{
MyStruct* ary = new MyStruct[SIZE];
size)t total_stored = SIZE;
sort(ary, ary + total_stored); // <-- operator < will be called.
for (int j = 0; j <tota_stored; j++)
{
cout << ary[j].level<< ary[j].m<< ary[j].ks<< " \n"; //print sorted
}
return 0;
}
struct MyStruct
{
int-level;//根据以下内容进行排序
int m;
查尔克斯;
友元内联布尔运算符<(常量Mystruct&a、常量Mystruct&b)
{
返回a.level 排序(ary,ary+存储的总数量)排序采用比较谓词,这样你就可以通过一个自定义操作符。知道如何使用这样的谓词可以解决你的问题。你尝试了什么?STD::排序需要一个比较谓词,这样你就可以通过一个自定义操作符。知道如何使用这样的谓词可以解决你的问题。你尝试了什么?在C++ 98中,你也可以使用一个“函子”。完全正确。必须执行更高级的排序选项。在C++ 98中,你也可以使用“函子”;完全正确。必须执行更高级的排序选项。