Более чистый способ определения постоянного вектора кортежей в C ++ 11 - PullRequest
3 голосов
/ 07 марта 2019

У меня есть постоянный вектор кортежей, в котором каждый кортеж содержит ключ, имя, количество, значение.Вот как я это определяю -

// tuple of key, name, quantity, value
const std::vector<std::tuple<unsigned char, std::string, unsigned char, float> > myTable{
    std::tuple<unsigned char, std::string, unsigned char, float>(0, "mango", 12, 1.01f),
    std::tuple<unsigned char, std::string, unsigned char, float>(4, "apple", 101, 22.02f),
    std::tuple<unsigned char, std::string, unsigned char, float>(21, "orange", 179, 39.03f),
};

Внутри основной функции мне нужен индекс каждого кортежа и все значения для обработки.Для простоты я печатаю их следующим образом:

for (int index = 0; index < myTable.size(); index++) {
    auto key = std::get<0>(myTable[index]);
    auto name = std::get<1>(myTable[index]);
    auto quantity = std::get<2>(myTable[index]);
    auto value = std::get<3>(myTable[index]);
    std::cout << " index: " << index
              << " key:" << (int)key
              << " name:" << name
              << " quantity:" << (int)quantity
              << " value:" << value
              << std::endl;
}

. Ясно видно, что способ определения вектора не столь чист. Я бы предпочел иметь много чище, например, следующее: -

const std::vector<std::tuple<unsigned char, std::string, unsigned char, float> > myTable{
    (0, "mango", 12, 1.01f),
    (4, "apple", 101, 22.02f),
    (21, "orange", 179, 39.03f),
};

Есть ли более чистый способ определения постоянного вектора кортежей в C ++ 11?

1 Ответ

8 голосов
/ 07 марта 2019

Вы можете использовать {}:

const std::vector<std::tuple<unsigned char, std::string, unsigned char, float> > myTable{
    {0, "mango", 12, 1.01f},
    {4, "apple", 101, 22.02f},
    {21, "orange", 179, 39.03f},
};
...