C++ C} &x2B+;如何以特定格式为用户显示对象向量
好吧,我一直在为此痛打自己,我不认为在这篇文章中包含我所有的代码来找到答案。我的部分问题是我真的不知道该如何表达这个问题 假设我有一个名为inventory的对象向量,它从我的Item类中获取对象。我做了一个函数:C++ C} &x2B+;如何以特定格式为用户显示对象向量,c++,string,vector,format,output,C++,String,Vector,Format,Output,好吧,我一直在为此痛打自己,我不认为在这篇文章中包含我所有的代码来找到答案。我的部分问题是我真的不知道该如何表达这个问题 假设我有一个名为inventory的对象向量,它从我的Item类中获取对象。我做了一个函数:inventory.addItem(itemObject) 因此,我只需使用inventory.push_back(itemObject) 功能 当我显示向量时,我可以遍历它并打印到控制台 iterator->itemObject.getItemName() 但我的主要目标是打
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循环迭代来帮助实现这一点吗?或者这听起来像个坏主意,我应该坚持把它们分开打印
谢谢你的建议 您可以使用来执行此操作:
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;
}
您想要的是地图而不是矢量:
#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();
}
#包括
#包括
结构项{
std::字符串名;
项(std::string name):名称(name){}
bool运算符使用例如(或可能)如何?这样您就可以很容易地获得“元素”的一个名称也可以使用,项目作为键,计数作为数据。为什么不unordered\u map
?@Everyone因为std::map
写起来比较短,我们不知道性能是OP用例中的一个问题。@Everyone“一个相同的键”?我不明白
#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();
}