An enum can choose a label from an array when its values are compact.

enum index Casting a compact enum to an integer can select related data from an array.

Enum Arrays

day
enum_arrays.cpp
Replay: real traced execution (multi-file project)
#include <array>
#include <iostream>
#include <string>

enum class Day {
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday
};

int main() {
    Day day = Day::Wednesday;
    std::array<std::string, 5> labels{"Mon", "Tue", "Wed", "Thu", "Fri"};
    std::array<int, 5> tasks{2, 3, 4, 3, 1};

    int index = static_cast<int>(day);

    std::cout << "day=" << labels[index] << std::endl;
    std::cout << "tasks=" << tasks[index] << std::endl;
    return 0;
}
#include <array>
#include <iostream>
#include <string>

enum class Day {
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday
};

int main() {
    Day day = Day::Monday;
    std::array<std::string, 5> labels{"Mon", "Tue", "Wed", "Thu", "Fri"};
    std::array<int, 5> tasks{2, 3, 4, 3, 1};

    int index = static_cast<int>(day);

    std::cout << "day=" << labels[index] << std::endl;
    std::cout << "tasks=" << tasks[index] << std::endl;
    return 0;
}
#include <array>
#include <iostream>
#include <string>

enum class Day {
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday
};

int main() {
    Day day = Day::Friday;
    std::array<std::string, 5> labels{"Mon", "Tue", "Wed", "Thu", "Fri"};
    std::array<int, 5> tasks{2, 3, 4, 3, 1};

    int index = static_cast<int>(day);

    std::cout << "day=" << labels[index] << std::endl;
    std::cout << "tasks=" << tasks[index] << std::endl;
    return 0;
}
  1. day ← 2, labels ← (empty), tasks ← (empty), index ← 2

    13int main() {14    Day day→ 2 = Day::Wednesday; //@day=Day::Monday, Day::Friday15    std::array<std::string, 5> labels→ (empty){"Mon", "Tue", "Wed", "Thu", "Fri"};16    std::array<int, 5> tasks→ (empty){2, 3, 4, 3, 1};1718    int index→ 2 = static_cast<int>(day2);1920    std::cout << "day=" << labels(empty)[index2] << std::endl;21    std::cout << "tasks=" << tasks(empty)[index2] << std::endl;22    return 0;23}
    outputday=Wed
    tasks=4
  1. day ← 0, labels ← (empty), tasks ← (empty), index ← 0

    13int main() {14    Day day→ 0 = Day::Monday;15    std::array<std::string, 5> labels→ (empty){"Mon", "Tue", "Wed", "Thu", "Fri"};16    std::array<int, 5> tasks→ (empty){2, 3, 4, 3, 1};1718    int index→ 0 = static_cast<int>(day0);1920    std::cout << "day=" << labels(empty)[index0] << std::endl;21    std::cout << "tasks=" << tasks(empty)[index0] << std::endl;22    return 0;23}
    outputday=Mon
    tasks=2
  1. day ← 4, labels ← (empty), tasks ← (empty), index ← 4

    13int main() {14    Day day→ 4 = Day::Friday;15    std::array<std::string, 5> labels→ (empty){"Mon", "Tue", "Wed", "Thu", "Fri"};16    std::array<int, 5> tasks→ (empty){2, 3, 4, 3, 1};1718    int index→ 4 = static_cast<int>(day4);1920    std::cout << "day=" << labels(empty)[index4] << std::endl;21    std::cout << "tasks=" << tasks(empty)[index4] << std::endl;22    return 0;23}
    outputday=Fri
    tasks=1