首页 > 解决方案 > C++ 使用 lambda 进行排序很慢

问题描述

我正在尝试解决 Google Hash Challenge 2020 问题。在这个问题中,您有一些图书馆,并且对于每个图书馆,您都有一个书籍列表。每本书都有一个全局分数(定义为整数)。现在,我想通过降低分数对每个图书馆的书籍进行排序,我写了这个

for (auto it = inst.libraries.begin(); it != inst.libraries.end(); ++it)
{
    std::sort((*it).books.begin(), (*it).books.end(), [inst](long const &b1, long const &b2) -> bool { return inst.scores[b1] > inst.scores[b2]; });
}

inst是我保存数据的地方。对于具有 1000 个图书馆和每个图书馆少于 1000 本书的实例,之前的代码(使用 O2 选项)运行大约 8 分钟。

我的 C++ 代码中是否有一些错误?我应该怎么做才能获得更好的表现?

标签: c++performancesortinglambda

解决方案


您的 lambdainst为每次调用sort. 改为[&inst]改为。


推荐阅读