2009-06-29 2 views
0

У меня есть список, содержащий dbfile, пути, и мне нужно добавить их на карту inorder, чтобы получить соответствующие значения. мой список содержит элементы, как, какКак добавить элементы списка следующим образом?

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

+0

Тогда вы должны поместить мой пример кода в вспомогательной функции. –

+0

Как это сделать, PLZ объяснить, я понятия не имею. – Cute

1

Когда вы читаете строку, как «звезда» (мы предполагаем, что в с), createa запись карты:

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

Теперь вы будете читать имена каталогов, в скажем д. Как вы только что создали запись, это безопасно использовать оператор карты можно в []:

mymap[s].push_back(d); 
+0

Как слить его в течение 20 минут с помощью итератора – Cute

+0

введите код, который я предложил в цикле. – 2009-06-29 10:47:29

+0

В чем проблема? Итерируйте по исходным данным и заполните цель. – sharptooth

0

Я полагаю, что это то, что вы хотите сделать: Вам нужно пройти через файл строка за строкой, используя getline(), чем вы конвертируете буфер, который вы использовали для getline, в строку и проверяете с помощью регулярного выражения, если это путь или имя datbasename (вы можете сделать ваш формат файла более подробным, чтобы выразить это более четко или вы используете 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"); 
}