3要素をパターンでソート.
安定ソートではないことに注意.
久しぶりの記事がこれですよ
// パターン. constexpr int k_sort_pattern_3[8][3] { {2, 1, 0}, // 000-> 0 {0, 2, 1}, // 001-> 1 {1, 0, 2}, // 010-> 2 {0 ,1, 2}, // 011-> 3 {2, 1, 0}, // 100-> 4 {2, 0, 1}, // 101-> 5 {1, 2, 0}, // 110-> 6 {0 ,1, 2}, // 111-> 7 }; // 3要素からパターンID計算. constexpr auto get_sort_pattern_3 = [](const float (&ar)[3]) { return ((ar[0] <= ar[1]) ? 1 : 0) + ((ar[1] <= ar[2]) ? 2 : 0) + ((ar[2] <= ar[0]) ? 4 : 0); }; // ソート対象の3要素配列. constexpr float src[3] = { -3.0f,3.0f,-2.3f }; // パターンID取得. constexpr int sort_pattern = get_sort_pattern_3(src); // パターンでソート順に取り出し. constexpr float sort_v0 = src[k_sort_pattern_3[sort_pattern][0]]; constexpr float sort_v1 = src[k_sort_pattern_3[sort_pattern][1]]; constexpr float sort_v2 = src[k_sort_pattern_3[sort_pattern][2]]; // チェック. static_assert(sort_v0 <= sort_v1 && sort_v1 <= sort_v2);