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中,你也可以使用“函子”;完全正确。必须执行更高级的排序选项。