有没有实用的方法让对象与地图一起使用? (我真的不太了解地图,如果这是一个糟糕的问题,那就很抱歉)。我有兴趣将地图用于包含物品对象的库存系统。项目对象具有名称,描述和金钱值。关键是项目的名称,链接变量将是我对该特定项目的项目数量。
如果地图不起作用,是否有人可以替代这种类型的系统?我需要跟踪每种类型物品的数量。
答案 0 :(得分:4)
C ++标准库模板map
只是一个存储容器,因此它绝对可以与对象一起使用。地图将您的对象作为其模板化参数参数。
地图适用于您的广告资源系统。使用类似的东西:
#include <pair>
#include <map>
#include <string>
#include <iostream>
class Item {
public:
Item(void) {}
~Item(void) {}
Item(std::string new_name) {
my_name=new_name;
}
void setName(std::string new_name) {
my_name= new_name;
}
std::string getName(void) {
return my_name;
}
private:
std::string my_name;
};
class Item_Manager {
public:
Item_Manager(void) {}
~Item_Manager(void) {}
void addItem(Item * my_item, int num_items) {
my_item_counts.insert( std::pair<std::string,int>(Item.getName(),num_items) );
}
int getNumItems(std::string my_item_name) {
return my_item_counters[my_item_name];
}
private:
std::map<std::string, int> my_item_counts;
};
main () {
Item * test_item = new Item("chips");
Item * test_item2 = new Item("gum");
Item_Manager * my_manager = new Item_Manager();
my_manager->addItem(test_item, 5);
my_manager->addItem(test_item2,10);
std::cout << "I have " << my_manager->getNumItems(test_item->getName())
<< " " << test_item->getName() << " and "
<< my_manager->getNumItems(test_item2->getName())
<< " " << test_item2->getName() << std::endl;
delete test_item;
delete test_item2;
delete my_manager;
}
这是stdlib地图及其功能的参考: http://www.cplusplus.com/reference/stl/map/
查看函数页面,了解如何迭代/索引地图等的示例
答案 1 :(得分:3)
如果您正在谈论std::map
,那么它就是一个可以与任何类型的对象一起使用的模板,只要提供比较对象以进行排序的方法即可。由于您的密钥(名称)是一个字符串,因此它可以直接使用std::map
struct Item
{
std::string description;
int value;
};
int main()
{
// associate item names with an item/quantity pair
std::map<std::string, std::pair<Item, int> > itemmap;
}
答案 2 :(得分:1)
我需要跟踪每种类型物品的数量。
std::vector<std::pair<Item, int> >
怎么样?