Формирование массива Tuple C ++ - PullRequest
0 голосов
/ 21 октября 2019

Я пытаюсь создать «Торговый автомат», где я могу иметь множество закусок, причем каждая закуска представляет собой кортеж с именем, ценой и количеством. Это возможно, или мне лучше просто использовать структуры? Вот что у меня пока так:

#include <iostream>
#include <tuple>
#include <string>

using namespace std;

tuple<string, float, int> snacks[3] = {("food 1",1.2,20),("food 2",1.2,20),("food 3",1.2,30)};

int main() {
    return 0;
}

Ответы [ 2 ]

0 голосов
/ 23 октября 2019

Это можно сделать так:

//declare and initialize tuples
tuple<string, float, int> potato("Potato Chips", 1.25, 20), cookie("Cookies", 0.85, 20), candy("Candy", 0.95, 20);

//set up array
const int s = 3; //size of array.
array<tuple<string, float, int>, s> snacks = {potato, cookie, candy}; //array
0 голосов
/ 21 октября 2019

Синтаксис будет:

tuple<string, float, int> snacks[3] = {
    {"food 1", 1.2, 20},
    {"food 2", 1.2, 20},
    {"food 3", 1.2, 30}
};

Но человеку проще работать со структурой, поэтому у вас может быть отличное имя:

struct Snack
{
    std::string name;
    float price = 0;
    int quantity = 0;
};

Snack snacks[3] = {
    {"food 1", 1.2, 20},
    {"food 2", 1.2, 20},
    {"food 3", 1.2, 30}
};

Возможно, у вас все еще есть функция для преобразования вашей структурыstd::tuple для материала для сравнения или для итерации по каждому члену:

auto as_tuple(const Snack& s) { return std::tie(s.name, s.price, s.quantity); }
auto as_tuple(Snack& s) { return std::tie(s.name, s.price, s.quantity); }

bool operator <(const Snack& lhs, const Snack& rhs) {
    return as_tuple(lhs) < as_tuple(rhs);
}

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...