如何以某种格式为用户显示对象向量
C}++ How to display a vector of objects for the user in a certain format
好吧,我一直在为此自责,我不认为在这篇文章中包含我的所有代码来找到答案。我的部分问题是我真的不知道该怎么表达这个问题。
假设我有一个名为inventory的对象向量,它从我的Item类中获取对象。我做了一个函数:inventory.addItem(itemObject)
所以我只需使用inventory.push_back(itemObject)
就可以成功添加项目作用
当我显示矢量时,我可以迭代它并打印到控制台
iterator->itemObject.getItemName()
但我的主要目标是打印出我有多个相同的对象,打印出其中一个getItemName,然后打印出getItemName值相等的对象数量的整数值,并打印出旁边的值:
例如:
Item hammer("Hammer");
Item sword("Sword");
inventory.addItem(hammer);
inventory.addItem(hammer);
inventory.addItem(hammer);
inventory.addItem(sword);
如果我使用我的inventory.displayInventory()
函数,我所做的就是遍历每个对象,并访问对象的getItemName()
函数,并将其输出给我:
"Hammer"
"Hammer"
"Hammer"
"Sword"
我的目标是在我的inventory.displayInventory()
函数中有:
"Hammer" (3)
"Sword" (1)
有人知道我如何操作for循环迭代来帮助实现这一点吗?或者这听起来是一个彻头彻尾的坏主意,我应该坚持让它们分开打印吗?
谢谢你的建议!
您可以使用map
来执行此操作:
std::map<std::string, int> items;
for(Item const& item : inventory) {
items[item.getItemName()]++;
}
for(auto const& pair : items) {
std::cout << pair.first << ": (" << pair.second << ")" << std::endl;
}
如果您需要比"项目名称"更具体的计算,这也是可能的,尽管您需要确保Item
类重载operator<
和operator==
,因为std::map
要求其键是可排序的。不过,如果你已经这样做了,那么代码就稍微简单一点:
std::map<Item, int> items;
for(Item const& item : inventory) {
items[item]++;
}
for(auto const& pair : items) {
std::cout << pair.first.getItemName() << ": (" << pair.second << ")" << std::endl;
}
您想要的是地图而不是矢量:
#include <iostream>
#include <map>
struct Item {
std::string name;
Item(std::string name) : name(name){}
bool operator<(const Item& other) const { return name < other.name;}
};
struct Inventory {
std::map<Item,size_t> data;
void addItem(const Item& item){ data[item]++; }
void print(){
for (auto e : data){
std::cout << e.first.name << " (" << e.second << ")n";
}
}
};
int main(){
Item hammer("hammer");
Item knife("knife");
Inventory inventory;
inventory.addItem(hammer);
inventory.addItem(hammer);
inventory.addItem(knife);
inventory.print();
}
实时演示
Item
需要一个operator<
,所以你可以把它放在地图上。如果密钥不存在,data[item]++;
会将其添加到映射中(如果不存在,则默认情况下会初始化计数),并增加计数。最后,打印库存可以通过一个简单的循环来完成。
PS:或者,您可以使用std::unordered_map
或其他关联容器。
- 显示基于用户输入的整数的字符
- 如何存储用户输入的所有数据,然后在他们想要查看所有数据时显示它们
- 我要求用户输入大小和数组,但是当我打印矢量时,它仅显示'0'作为输出
- 在数组中显示第一个元素用户输入
- 如何向用户显示特定错误,要求他/她使用循环再次提供输入?
- 运算符重载以显示用户定义的数据类型
- 错误:调用'strcmp'没有匹配函数(尝试设置显示用户信息功能)
- C++ .我正在尝试通过使用开关内的数组来获取用户输入,但是当我运行代码时,它显示分段错误?
- boost::p rogram_options - 验证失败时,显示用户在错误消息中输入的值
- 程序,它接受用户输入的字符并按出现的降序显示它们
- 使用开关大小写语句抽取随机扑克牌等级和花色以显示用户
- 如何存储多个用户输入,然后以C++显示它们
- 在单击QT中单击图像时,尝试立即显示用户编辑操作的结果
- C 程序总和从用户和显示平均值
- 如何在背景中运行vtkrenderwindow而不向用户显示
- 如何以某种格式为用户显示对象向量
- 有没有办法选择通过标准的OPENFILE对话框向用户显示哪些文件
- 有什么方法可以制作一个程序,随机选择10-20个字符串并用C++向用户显示
- 在首次向用户显示表单之前,应用程序不会启动
- FireBreath:如何安全地向用户显示确认对话框