【问题标题】:How to print a vector of pairs that have as first and second 2 classes in c++?如何在 C++ 中打印具有第一个和第二个 2 类的对向量?
【发布时间】:2020-05-04 23:17:37
【问题描述】:

我有这样的东西,其中 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;
    }
}

并且在这两种方式中我都有错误(第一个 - 没有运算符 [] 和第二个,没有运算符

【问题讨论】:

  • 您需要为ClientOrder提供operator&lt;&lt;
  • 我想过这个问题,但你能写信告诉我这应该是什么样子吗?我不知道..
  • 看到这个question
  • 如果一个复杂的案例失败了,看看更简单的案例,看看哪里出了问题。你能打印成对这些对象的向量吗?如果没有,你能打印一对这样的对象吗?如果没有,您可以单独打印这些对象中的每一个吗?在您掌握基础知识之前,不要让自己陷入复杂之中。 (查看更简单的案例也可以帮助您为 Stack Overflow 写一个更有针对性的问题。)

标签: c++ vector printing std-pair


【解决方案1】:

您的第一次尝试不起作用,因为it 是实际对,但std::pair 没有operator[]。您的第二次尝试是正确的方法,但它不起作用,因为您尚未为您的课程定义 operator&lt;&lt;

所以,简单定义operator&lt;&lt;,例如:

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;
    }
}

【讨论】:

    猜你喜欢
    • 2018-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-03
    • 1970-01-01
    • 2021-09-25
    • 1970-01-01
    相关资源
    最近更新 更多