Как напечатать вектор пар, которые имеют первый и второй два класса в с ++? - PullRequest
0 голосов
/ 05 мая 2020

У меня есть что-то вроде этого, где Client и Order являются классами:

  std::vector<std::pair<Client,Order>> pair;
    pair.push_back(std::make_pair(Client(2,"Anca"),Order(3,1)));
    pair.push_back(std::make_pair(Client(16,"Maria"),Order(1,3)));
    pair.push_back(std::make_pair(Client(29,"Alex"),Order(10,5)));
class Client{
private:
    int dateWhenOrderWasPlaced;
    std::string clientName;
public:
    Client(int date,std::string name){
        dateWhenOrderWasPlaced=date;
        clientName=name;
    }
class Order{
private:
    int amountPizza;
    int pizzaAge;
public:
    Order(int amPizza,int agePizza){
        amountPizza=amPizza;
        pizzaAge=agePizza;
    }

И я не могу понять, как это напечатать. Я пробовал разными способами:

void print(std::vector<std::pair<Client,Order>> pair){
    for(const auto& it : pair){
        std::cout << "First: "<<pair[it].first<< ", Second: " << pair[it].second <<std::endl;
    }
}

И это:

void print(std::vector<std::pair<Client,Order>> pair){
    for(const auto& it : pair){
        std::cout << "First: "<<it.first<< ", Second: " << it.second <<std::endl;
    }
}

И в обоих случаях у меня есть ошибка (во-первых, без оператора [] и во-вторых, без оператора <<) </p>

1 Ответ

0 голосов
/ 05 мая 2020

Ваша первая попытка не сработает, потому что it - фактическая пара, а std::pair не имеет operator[]. Вторая попытка - это правильный способ go, но он не работает, потому что вы не определили operator<< для своих классов.

Итак, просто определите operator<<, например:

class Client
{
private:
    int dateWhenOrderWasPlaced;
    std::string clientName;

public:
    Client(int date, std::string name)
        : dateWhenOrderWasPlaced(date), clientName(name)
    {
    }

    friend std::ostream& operator<<(std::ostream &os, const Client &c)
    {
        // print c.dateWhenOrderWasPlaced and c.clientName to os as needed...
        return os;
    }
};

class Order
{
private:
    int amountPizza;
    int pizzaAge;

public:
    Order(int amPizza, int agePizza)
        : amountPizza(amPizza), pizzaAge(agePizza)
    {
    }

    friend std::ostream& operator<<(std::ostream &os, const Order &o)
    {
        // print o.amountPizza and o.pizzaAge to os as needed...
        return os;
    }
};

void print(const std::vector<std::pair<Client,Order>> &pair)
{
    for(const auto& it : pair)
    {
        std::cout << "First: " << it.first << ", Second: " << it.second << std::endl;
    }
}
...