Как добавить элементы списка следующим образом? - PullRequest
0 голосов
/ 29 июня 2009

У меня есть список, содержащий 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

как я могу это сделать.

Пожалуйста, помогите мне

Ответы [ 4 ]

1 голос
/ 29 июня 2009

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

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

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

mymap[s].push_back( d );
1 голос
/ 29 июня 2009

Вы можете написать следующее:

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 голосов
/ 29 июня 2009

Вам нужна карта имен (строка) со списком путей (строка). Все, что вам нужно сделать, это объявить: std :: map >. Легко, как пирог: -)

Попробуйте это:

#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");
}
0 голосов
/ 29 июня 2009

Полагаю, это то, что вы хотите сделать: Вам нужно построчно просмотреть файл, используя getline(), затем конвертировать буфер, который вы использовали для getline, в строку и проверить с помощью регулярного выражения, является ли это путь или имя базы данных (вы можете сделать свой формат файла более подробный, чтобы выразить это более четко или вы используете XML). Затем вы вызываете соответствующую функцию для добавления на карту. В псевдокоде с допущением, что в дБ есть только пути:

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

Лень сейчас писать рабочую версию ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...