2010-04-29 26 views
2

我有一個需要跟蹤的號碼列表。這些數字是鬆散相關的,但代表明顯不同的項目。我想保留一個數字列表,但能夠通過名稱引用它們,以便我可以打電話給他們並在需要的地方輕鬆使用它們。有點像庫存清單,其中的數字都是指零件ID,我想將它們稱爲idPart1,idPart2,idPart3,以便在使用它們時很容易識別它們的用途。如何存儲類似庫存的數字列表?

這樣做的最好方法是什麼?
1)定義一個結構。說,庫存。一些int成員將被包含,第1部分,第2部分等。要使用,將創建結構實例,賦值給成員的值,以及根據需要用struct.member來使用數字。
2)定義一個枚舉。使用part1,part2作爲枚舉文字。將實際值存儲在向量或列表中,每個索引對應於枚舉中該數字名稱的值。使用枚舉文字檢索值,列出[enumLit]。
3)完全不同的東西

沒有什麼我需要做的數字 - 只是每隔一段時間查看它們。由於沒有處理,我認爲一個新班級對他們來說是矯枉過正的,但我願意相反。

有什麼建議嗎?

+0

我會避免使用枚舉方法,因爲當添加新零件時,您總是需要添加到枚舉列表中。 – Robb 2010-04-29 20:19:00

+0

但是,如果您存儲了新零件,則必須添加一些零件。 – Rachel 2010-04-29 20:25:40

回答

2

讓我試着重新措辭你想要在這裏做什麼。你想誰用你的代碼,開發人員能夠指預先定義的組數值:使用

  • 直觀的名字
  • 將在編譯時
  • ,而且IDE將識別驗證爲了代碼完成。

如果這些值在運行時不會改變,並且它們是整數值,那麼您可以使用Mark Ransom所示的枚舉。

如果值不會在運行時改變,他們都是非整數值,您可以使用的#define或const變量:

#define PART1 1.3 
#define PART2 "1233-456" 

namespace PartNumbers 
{ 
    const double Part1 = 1.3; 
    const char* Part2 = "123-456" 
} 

如果值可能會在運行時更改,您可以使用您標識的兩個選項中的任何一個。這兩個選項都有一個缺點,就是需要實例化一個對象來保存當前的零件號碼值。其他選項更容易實現,不需要任何運行時查找。一切都在編譯時解決。

所有這些選項都要求您的代碼的用戶在訪問新零件類型時重新編譯。即使現有代碼無法訪問,您的第一個選項可能需要在添加新零件類型時重新編譯現有代碼;它更容易發生內存佈局變化。

+0

它們在運行時設置。我已經選擇了我提到的兩個選項,但都感到尷尬。我希望得到一個更好的方法來做到這一點,否則就是沒有簡單的方法,並且其中一個選項是可以接受的。 – Rachel 2010-04-30 14:38:20

1

您可以使用帶有字符串的地圖作爲關鍵字。與密鑰作爲字符串,實際數量與int

std::map<string, int> someMapName; 

std::map<string,int> mymap; 
mymap["part1"] = value1; 
cout << mymap["part1"]; 
+0

我不喜歡用戶需要知道作爲關鍵字的確切字符串的想法。 – Rachel 2010-04-29 20:14:59

+0

@Rachel,你的例子都顯示用戶需要知道字符串,作爲結構成員名稱或枚舉標記。我不明白這個反對意見。 – 2010-04-29 20:28:41

+0

我想個人喜好,但枚舉文字和結構成員彈出與智能感知,留下一大堆的錯誤空間比輸入字符串名稱會。編譯器捕捉它們。 – Rachel 2010-04-29 20:30:38

1

你可以使用。這樣,你可以做你可以使用

someMapName["idPart1"] 

搶號碼。

編輯: 如果您沒有問題枚舉然後選擇2會完美地與性病::地圖的只是代替串的工作,關鍵是你的枚舉類型明顯。

+0

我想避免用戶需要輸入字符串。通常錯誤的空間太大。 – Rachel 2010-04-29 20:32:32

+0

@Rachel沒有讓用戶輸入任何東西留下錯誤空間?用戶輸入的內容是否真的比直接輸入數字的可能性更小? – 2010-04-29 20:39:14

0

根據您對其他答案的意見,我會說枚舉是要走的路,但我會構造他們有點不同。

namespace id { 
    enum { 
     part1 = 123, 
     part2 = 456, 
     part3 = 987, 
     ... 
    }; 
} 

cout << id::part1; 
0

使用數據庫。
具體來說就像一個表如下:

+------------------+-------------------+ 
| Item Name  | Item Number  | 
+------------------+-------------------+ 

內部,這可以表示爲:

std::map<std::string, unsigned int> index_by_name; 
//... 
std::string part_name = "Part0123"; 
unsigned int part_number = 0; 
part_number = index_by_name[name]; 

std::map<std::string, // The item name 
     unsigned int> // The number. 

當你想要的號碼,使用該名稱檢索

嚴重的是,使用數據庫。檢查SQLite和MySQL。

相關問題