Кроме того, есть ли способ выполнить операцию сортировки во время компиляции?
Краткий ответ: нет.
Длинный ответ.
Нет, потому что std::sort()
это constexpr
только из C ++ 20 (вы пометили C ++ 11), потому что функция void
(std::sort()
) не может быть constexpr
в C ++ 11 потому что QMap
и QList
не являются классами constexpr
(если я не ошибаюсь), потому что вы не объявили GMAP
и другие объекты, задействованные как constexpr
и т. д.
Но если предположить, что класс MyMap
определен constexpr
, класс MyList
объявлен constexpr
, функция MySort()
определена constexpr
, вы можете написать нечто подобное (начиная с C ++ 14 потому что в C ++ 11 вы не можете написать такую сложную constexpr
функцию)
constexpr MyList foo ()
{
MyMap mm { /* some values */ };
MyList ml { ml.keys() };
MySort(ml.begin(), ml.end());
return ml;
}
// ...
constexpr auto ml_final { foo() };
Обратите внимание, что ml_final
объявлено constexpr
.
Это необходимо для навязывания (до C ++ 20) компилятора для инициализации значения времени компиляции, если это возможно, или для выдачи ошибки компиляции, если это невозможно.