gpt4 book ai didi

c++ - 打印对象图,其中另一个对象作为键

转载 作者:搜寻专家 更新时间:2023-10-31 02:05:07 26 4
gpt4 key购买 nike

我正在尝试打印我的 map <Object, int> 的内容.这是有问题的代码:

void Inventory::print_initial_inventory()
{
for(auto p : inventory) {
std::cout << p.first << " : " << p.second << std::endl;
}
}

std::ostream& operator<<(std::ostream& outstream, Inventory& inv)
{
outstream << inv.first << "\nNumber of parts: " << inv.second << std::endl;
return outstream;
}

我知道问题出在 p.first ?因为std::cout不知道如何打印对象,所以我尝试重载 operator<< ,但我不确定该怎么做。谁能指出我正确的方向?

编辑 以下是我再次尝试该问题的方式。我被建议将 key 类型传递给 operator<<重载。现在这是我的代码:

void Inventory::print_initial_inventory()
{
for(auto x : inventory) {
std::cout << x.first << " : " << x.second << std::endl;
}
}

std::ostream& operator<<(std::ostream& outstream, Auto_Part& inv)
{
outstream << "Type: " << inv.type << "\nName: " << inv.name << "\nPart Number: " << inv.part_number << "\nPrice: $" << inv.price << std::endl;
return outstream;
}

我仍然收到指向 x.first无效二进制表达式错误 .

最佳答案

I know the problem is at p.first? because std::cout doesn't know how to print an object, so I tried to overload the << operator, but I'm not sure how to do it.

可以在这篇文章中找到运算符重载的基础知识:What are the basic rules and idioms for operator overloading?我强烈建议您在进一步操作之前阅读此内容

在您的案例中,我发现了两个基本问题:

  1. 你没有提到你的 Key很多课。特别是,您将如何将元素插入到 std::map 中? (Inventory 类的成员),如果您不提供 operator< ?自 Key类是用户定义的,你需要给一个。您可以在这篇 SO 帖子中阅读更多相关信息:std::maps with user-defined types as key
  2. 您的代码的第二个也是主要问题是,未提供 operator<< 为你的 Key类型。这可以按如下方式完成:

例如,假设 class Key

class Key
{
int member;
public:
Key(const int a): member(a){}
// provide operator< for your Key type
bool operator<(const Key& other)const { return this->member < other.member; }
// provide operator<< for Key class like follows
friend std::ostream& operator<<(std::ostream& out, const Key& key);
};
// implement outside the class
std::ostream& operator<<(std::ostream& out, const Key& key)
{
// simply for this case
return out << key.member;
}

现在您可以提供 operator<<对于 Inventory以类似的方式上课。

SEE LIVE EXAMPLE

// now in Inventory class
class Inventory
{
std::map<Key, int> inventory;
public:
Inventory(const std::map<Key, int>& m): inventory(std::move(m)) {}
// declared as friend, so that you can access the private member(map)
friend std::ostream& operator<<(std::ostream& out, const Inventory& inv);
};
// implement outside the class
std::ostream& operator<<(std::ostream& out, const Inventory& inv)
{
for(const auto& entry: inv.inventory )
out << entry.first << " Number of parts: " << entry.second << std::endl;
return out;
}
// in the main
int main()
{
Key key1{1};
Key key2{2};
std::map<Key, int> tempInvObj{{key1, 11}, {key2, 12}};
Inventory obj{tempInvObj};
std::cout << obj;
return 0;
}

输出:

1 Number of parts: 11
2 Number of parts: 12

关于c++ - 打印对象图,其中另一个对象作为键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52454164/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com