是否有任何實際的方法讓對象與地圖一起工作? (如果這是一個糟糕的問題,我對地圖不是很瞭解,所以很抱歉)。我有興趣使用包含項目對象的庫存系統的地圖。項目對象具有名稱,說明和貨幣值。關鍵將是項目的名稱,鏈接變量將是我對該特定項目的項目數量。使用地圖庫存系統
如果地圖不工作,沒有任何人有一個很好的選擇,這種類型的系統?我需要跟蹤每種物品的數量。
是否有任何實際的方法讓對象與地圖一起工作? (如果這是一個糟糕的問題,我對地圖不是很瞭解,所以很抱歉)。我有興趣使用包含項目對象的庫存系統的地圖。項目對象具有名稱,說明和貨幣值。關鍵將是項目的名稱,鏈接變量將是我對該特定項目的項目數量。使用地圖庫存系統
如果地圖不工作,沒有任何人有一個很好的選擇,這種類型的系統?我需要跟蹤每種物品的數量。
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