2009-06-29 63 views
0

我有一個包含dbfile,路徑的列表,我需要將它們添加到地圖中以獲取相應的值。 我的列表中包含的項目,如像如何以下列方式添加列表項目?

star 
e:\data\star.mdf 
e:\data\star.ldf 
kiran 
e:\data\kiran.mdf 
e:\data\kiran.ldf 
hai 
e:\data\hai.mdf 
e:\data\hai.ldf  

現在我需要通過填充名單按規定格式

map<string,list<string>> 
    |   | 
    \/   \/ 
    databasename paths info 

我怎麼可以這樣地插入。

PLZ幫我

回答

1

你可以寫:

std::list tempList; 
tempList.push_back("e:\data\star.mdf"); 
tempList.push_back("e:\data\star.ldf"); 
m.insert(std::make_pair("star", tempList)); 

然而要注意的tempList將在插入被複制。您可能會認爲這是一個不可接受的性能開銷,可以通過使用指向列表的智能指針來解決。例如:

std :: map >> m;

+0

我有100個數據庫一樣,如何做到這一點的100 – Cute 2009-06-29 10:39:32

+0

然後,你得把我的示例代碼中的輔助功能。 – 2009-06-29 10:41:35

1

當你讀一個字符串,如「明星」(我們假設爲s),createa映射條目:

mymap.insert(std::make_pair(s, list <string>())); 

現在,你將閱讀目錄名,到發言權d。正如你剛纔創建的條目,它的安全使用地圖的運算符[]:

mymap[s].push_back(d); 
0

我想這是你想要做什麼: 你需要通過使用getline()文件中的行由行,將用於getline的緩衝區轉換爲字符串,並使用正則表達式檢查它是否爲路徑或數據庫名稱(可能會使文件格式更加冗長,以便更清楚地表達或使用XML)。然後你調用適當的函數來添加到地圖。 與所述假定僞代碼,只有有每分貝路徑:

infile.open(FILENAME);
while(infile.good()) {
getline(infile, buffer, blength)
string dbName = buffer
for(int i = 0; i < 2; i++) getline() and to string addStuffToMap();

懶得現在寫一個工作版本

0

你需要的是地圖名稱的(串)到路徑列表(字符串)。你需要做的只是聲明:std :: map < std :: string,std :: list < std :: string >>。容易餡餅:-)

試試這個:

#include <list> 
#include <map> 
#include <string> 


int main() 
{ 
    std::map<std::string,std::list<std::string> >  dbMap; 

    dbMap["star"].push_back("e:\data\star.mdf"); 
    dbMap["star"].push_back("e:\data\star.ldf"); 

    dbMap["kiran"].push_back("e:\data\kiran.mdf"); 
    dbMap["kiran"].push_back("e:\data\kiran.ldf"); 

    dbMap["hai"].push_back("e:\data\hai.mdf"); 
    dbMap["hai"].push_back("e:\data\hai.ldf"); 
} 
相關問題