2010-12-03 61 views
0
SKU1  SKU2  Description 
"" "34545"  "White Bread" 
"01545" "34236"  "Wheat Bread" 

我需要交叉引用這三個字段,即檢索SKU2同時知道SKU1,SKU1當知道SKU2,和說明而知道或者SKU1或SKU2。存儲和訪問的字符串的集合(STD C++)

我很好奇 - 做這件事的最好方法是什麼?使用search()或find()的向量?以某種方式使用地圖?

我目前正在使用vector< vector<string> >工作,循環通過'父'向量和'子'向量,比較值,但這似乎是原始的。

基本上,我需要一個向量,使用它的任何字符串作爲索引來返回其他兩個值之一。我做這件事的一般方式是否被認爲是可接受的/最佳的?

vector< vector<string> > products; 

int i = 0; 
for(i = 0; i < 2; ++i) 
{ 
    products.push_back(vector<string>()); 

    products[i].push_back("SKU1"); 
    products[i].push_back("SKU2"); 
    products[i].push_back("Description"); 

} 

感謝您的協助。

+0

您可以使用外部庫,或者您只能使用標準庫嗎? – AraK 2010-12-03 05:54:33

+0

我可以使用外部庫,但我希望儘可能使用STD。 – Smurf64 2010-12-03 06:06:48

回答

0

構建三個std::map<std::string, std::string> s:一個用於將SKU1映射到SKU2,一個用於將SKU1映射到說明,另一個用於將SKU2映射到說明。 (更好的是,使用std :: unordered_map,如果你有它(C++ 0x))。

這是假設您有很多數據並且優先考慮速度而不是內存使用情況。

+0

謝謝!我將如何從SKU1中檢索SKU2?我需要另一張地圖嗎?還是有辦法從一個值中檢索一個鍵? – Smurf64 2010-12-03 05:58:59

1

我會建議使用兩個地圖,索引有你需要的信息的對象:

struct MyInfo 
{ 
    std::string SKU1; 
    std::string SKU2; 
    std::string Description; 
}; 

std::map<std::string, MyInfo *> SKU1map; 
std::map<std::string, MyInfo *> SKU2map; 

MyInfo * newProduct = new MyInfo; ///Do not forget to delete!! 
newProduct->SKU1 = //SKU1 value 
newProduct->SKU2 = //SKU2 value 
newProduct->Description = //Description value 

SKU1map[newProduct->SKU1] = newProduct; 
SKU2map[newProduct->SKU2] = newProduct; 

這將是一個體面快速實現(而不是線性搜索好得多),和如果你處理很多產品實例,那麼它也將更有效地利用內存。

相關問題