gpt4 book ai didi

c++ - 使用算法头对 structArray 进行排序

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:33:38 24 4
gpt4 key购买 nike

我看过几个零运气的例子,但我想执行一个非常简单的任务,我只想使用算法 header

对结构进行排序
    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;
}

我想根据结构中的 level 变量对其进行排序

最佳答案

你可以像这样给 std::sort 一个谓词

std::vector<MyStruct> ary(SIZE);
std::sort(ary.begin(), ary.end(), [](auto a, auto b){return a.level < b.level;});

首先,我鼓励你不要使用 new, new[], delete, delete[]在 C++ 现代。最好用容器和智能指针(我这里用std::vector)

二、什么意思:[](auto a, auto b){return a.level < b.level;} .

它是一个名为 lambda 的“对象”。 Lambda 有点像函数之类的东西。这个“函数”有两个参数:a 和 b,它们的类型在编译时自动推导出来(多亏了 auto)。

整个函数就是我们所说的谓词。在这里,您只想比较级别部分,这就是我使用 a.level < b.level 的原因.

此外,您还可以查看 std::sort 的文档在这里发挥作用: http://en.cppreference.com/w/cpp/algorithm/sort

如你所见,我正在使用这个:

template< class RandomIt, class Compare >
void sort( RandomIt first, RandomIt last, Compare comp );

Compare comp这是我用 lambda 定义的谓词。

这里有更多关于 lambda 的信息 https://stackoverflow.com/a/7627218/4950448

但是,如果像 Michaël Roy 建议的那样,您必须使用 C++98,您可以使用“仿函数”(不确定名称)

struct CompareStructOperatorLess {
bool operator()(const MyStruct &a, const MyStruct &b) const {
return a.level < b.level;
}
};
...
std::sort(ary.begin(), ary.end(), CompareStructOperatorLess());

关于c++ - 使用算法头对 structArray 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45643522/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com