是否有任何实际的方法让对象与地图一起工作? (如果这是一个糟糕的问题,我对地图不是很了解,所以很抱歉)。我有兴趣使用包含项目对象的库存系统的地图。项目对象具有名称,说明和货币值。关键将是项目的名称,链接变量将是我对该特定项目的项目数量。使用地图库存系统
如果地图不工作,没有任何人有一个很好的选择,这种类型的系统?我需要跟踪每种物品的数量。
是否有任何实际的方法让对象与地图一起工作? (如果这是一个糟糕的问题,我对地图不是很了解,所以很抱歉)。我有兴趣使用包含项目对象的库存系统的地图。项目对象具有名称,说明和货币值。关键将是项目的名称,链接变量将是我对该特定项目的项目数量。使用地图库存系统
如果地图不工作,没有任何人有一个很好的选择,这种类型的系统?我需要跟踪每种物品的数量。
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/
看功能页的如何通过遍历/索引地图实例等
我想
Your Item类不应位于命名空间标准中。你混淆了赋值和声明。在一秒钟内看到我上面的编辑。 – 2010-09-28 18:14:17
graydragon10:'std :: map'的类型参数决定编译时间。我怀疑'getName'返回一个'std :: string'?如果是这样,你应该声明它'std :: map
如果你在谈论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;
}
问题是,我的项目是一个类(设法使它可重用为未来的游戏,我打算从子类的话) – graydragon10 2010-09-28 18:04:55
为什么是一个问题? – 2010-09-28 18:05:54
@graydragon - 您可以创建一个对数量有一个项目和一个int的引用的类。基本结构仍然是相同的 - 即一个带有键的地图,指向其中一个类的项目名称。 – 2010-09-28 18:06:39
我需要每种类型的项目我有数量的东西保持跟踪。
std::vector<std::pair<Item, int> >
怎么样?
如果我只希望每个项目类型出现在列表中一次,这样做会工作吗?像苹果 - 5,橘子-2等 – graydragon10 2010-09-28 18:08:14
你可能想通过教程学习C++。我们很难在问答网站教你C++。看看[这个伟大的C++书籍列表](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)。 – sbi 2010-09-28 18:22:25
如果我知道关于C++的一切,我不需要去问答网站。一直在阅读教程,阅读书籍,并试图从同行程序员那里获得帮助:) – graydragon10 2010-09-28 19:22:07
也许在这里抽象数据类型和算法的一些基础也可能有帮助。如果您对如何挑选正确的技术解决方案似乎没有背景知识,那么您用您选择的最终技术选项来描述一个不确定的问题。 '库存系统'为一个汽车场,网上书店,电脑游戏,家庭DVD目录?什么是输入/输出,多少次同步变化以及多久? – 2010-09-28 19:59:35