C ++ медленно сортирует с использованием лямбды - PullRequest
0 голосов
/ 03 марта 2020

Я пытаюсь решить проблему Google Ha sh 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 - это место, где я храню свои данные. Предыдущий код (с опцией O2) выполняется за 8 минут для экземпляра с 1000 библиотеками и менее 1000 книг в каждой библиотеке.

Есть ли ошибки в моем коде c ++? Что я должен сделать, чтобы добиться лучших результатов?

1 Ответ

9 голосов
/ 03 марта 2020

Ваша лямбда берет копию inst за каждый вызов sort. Вместо этого измените его на [&inst].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...