C++ 使用std::sort和原始指针数组?

C++ 使用std::sort和原始指针数组?,c++,lambda,C++,Lambda,假设您有一些较旧的代码和数据结构: struct TEST { int a; int b; }; TEST *items[9]; // Points to an array of TEST* 现在我想对这些对象进行排序。旧代码使用QSort,但我想使用std::sort。这是什么样子的 我试过这样的方法: typedef std::function<bool(const TEST *, const TEST*)> TestCompareType; TEST **ite

假设您有一些较旧的代码和数据结构:

struct TEST
{
   int a;
   int b;
};

TEST *items[9]; // Points to an array of TEST*
现在我想对这些对象进行排序。旧代码使用QSort,但我想使用std::sort。这是什么样子的

我试过这样的方法:

typedef std::function<bool(const TEST *, const TEST*)> TestCompareType;
TEST **items;
std::sort(items, items+size, 
    [](const TEST *p1, const TEST *p2) 
    {
        if(p1->a == p2->a)
        {
            return p1->b < p2->b;
        }
        else 
        { 
            // Ooops! Forgot to put "return here"
            p1->a < p2->a;

            // This would fix it
            // return p1->a < p2->a;
        }
    });
typedef std::function TestCompareType;
测试**项;
标准::排序(项目、项目+大小、,
[](常数测试*p1,常数测试*p2)
{
如果(p1->a==p2->a)
{
返回p1->bb;
}
其他的
{ 
//哎哟!忘了写“回来”
p1->aa;
//这会解决问题的
//返回p1->aa;
}
});
但我听到一个提示“表达式:无效的比较器”

有什么想法吗

更新:我认为这个错误与使用std::sort和指针数组有关,这完全是错误的。我用更接近我所拥有的代码替换了示例代码。我发现我打错了。在比较器的所有情况下,我都没有返回值。

当您使用

struct
{
   int a;
   int b;
} TEST;
您正在将
TEST
定义为匿名
struct
类型的变量

然后继续使用
TEST
,就好像它是一个类型一样

TEST **items;
更改
TEST
的定义,使其成为一个类型

struct TEST
{
   int a;
   int b;
};

这里有一个演示程序,它成功地构建了,但没有做任何有用的事情

#include <algorithm>
#include <cstddef>

struct TEST
{
   int a;
   int b;
};

void sortStuff(TEST** items, size_t size)
{
   std::sort(items, items+size,
             [](const TEST *p1, const TEST *p2) { return p1->a < p2->a; });
}

int main() {}
#包括
#包括
结构测试
{
INTA;
int b;
};
无效分拣(测试**项目,尺寸\u t尺寸)
{
标准::排序(项目、项目+大小、,
[](常量测试*p1,常量测试*p2){返回p1->aa;});
}
int main(){}

但我突然听到一个声音,说比较功能不好。确切的错误消息是什么?(另外,我希望您的实际应用程序中有更多的代码,因为
未初始化。请做一个MVCEPlease编辑您的问题,将
typedef
包含在不需要和未使用的中。您的
std::sort
行似乎正确。)(假设指针con不是
nullptr
items
size
正确初始化)。我的蜘蛛感觉刺痛,告诉我您使用的实际排序lambda不起作用(并且没有发布),尝试对a和b进行排序,但并不完全使用严格弱排序。但这显然是一个猜测,因为您没有向我们提供MCVE。