- for (auto const& host : list) {
- if (host && host->pimpl_netpoint && host->pimpl_netpoint->is_host())
- xbt_dynar_push(res, &host);
- }
- xbt_dynar_sort(res, hostcmp_voidp);
+ auto last = std::remove_if(begin(list), end(list), [](const simgrid::s4u::Host* host) {
+ return not host || not host->pimpl_netpoint || not host->pimpl_netpoint->is_host();
+ });
+ std::sort(begin(list), last,
+ [](const simgrid::s4u::Host* a, const simgrid::s4u::Host* b) { return a->get_name() < b->get_name(); });
+
+ xbt_dynar_t res = xbt_dynar_new(sizeof(sg_host_t), nullptr);
+ std::for_each(begin(list), last, [res](sg_host_t host) { xbt_dynar_push_as(res, sg_host_t, host); });