1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2025-06-24 00:41:36 +00:00

Use std::stable_sort

This commit is contained in:
Evil Eye 2023-08-13 20:26:59 +02:00
parent 3141cf9e28
commit f7edf24356

View file

@ -69,15 +69,10 @@ namespace MWGui
std::vector<std::pair<const ESM::Skill*, float>> skills; std::vector<std::pair<const ESM::Skill*, float>> skills;
skills.reserve(maxSkills); skills.reserve(maxSkills);
const auto sortSkills = [&]() { const auto sortByValue
for (size_t i = skills.size() - 1; i > 0; --i) = [](const std::pair<const ESM::Skill*, float>& lhs, const std::pair<const ESM::Skill*, float>& rhs) {
{ return lhs.second > rhs.second;
if (skills[i].second > skills[i - 1].second) };
std::swap(skills[i], skills[i - 1]);
else
break;
}
};
// Maintain a sorted vector of max maxSkills elements, ordering skills by value and content file order // Maintain a sorted vector of max maxSkills elements, ordering skills by value and content file order
const MWMechanics::NpcStats& actorStats = actor.getClass().getNpcStats(actor); const MWMechanics::NpcStats& actorStats = actor.getClass().getNpcStats(actor);
for (const ESM::Skill& skill : skillStore) for (const ESM::Skill& skill : skillStore)
@ -86,7 +81,7 @@ namespace MWGui
if (skills.size() < maxSkills) if (skills.size() < maxSkills)
{ {
skills.emplace_back(&skill, value); skills.emplace_back(&skill, value);
sortSkills(); std::stable_sort(skills.begin(), skills.end(), sortByValue);
} }
else else
{ {
@ -95,7 +90,7 @@ namespace MWGui
{ {
lowest.first = &skill; lowest.first = &skill;
lowest.second = value; lowest.second = value;
sortSkills(); std::stable_sort(skills.begin(), skills.end(), sortByValue);
} }
} }
} }