#include #include #include #include #include #include struct Job { std::string name; int duration; }; int main() { const std::array jobs{{ {"parse", 7}, {"cache", 3}, {"index", 7}, {"send", 1} }}; std::array order{}; std::iota(order.begin(), order.end(), std::size_t{0}); std::sort(order.begin(), order.end(), [&jobs](std::size_t a, std::size_t b) { if (jobs[a].duration != jobs[b].duration) { return jobs[a].duration < jobs[b].duration; } return a < b; }); assert((order == std::array{{3, 1, 0, 2}})); assert(jobs[0].name == "parse"); assert(jobs[order[0]].name == "send"); assert(jobs[order[2]].name == "parse"); }