使用地图进行库存系统

时间:2010-09-28 17:56:47

标签: c++

有没有实用的方法让对象与地图一起使用? (我真的不太了解地图,如果这是一个糟糕的问题,那就很抱歉)。我有兴趣将地图用于包含物品对象的库存系统。项目对象具有名称,描述和金钱值。关键是项目的名称,链接变量将是我对该特定项目的项目数量。

如果地图不起作用,是否有人可以替代这种类型的系统?我需要跟踪每种类型物品的数量。

3 个答案:

答案 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> >怎么样?