我有一个包含dbfile,路径的列表,我需要将它们添加到地图中以获取相应的值。 我的LIST包含类似
的项目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帮帮我
答案 0 :(得分: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 ::地图&GT;&GT;米;
答案 1 :(得分:1)
当你读到一个字符串,比如“star”(我们假设为s),创建一个地图条目:
mymap.insert( std::make_pair( s, list <string>() ) );
现在你将阅读目录名,比如d。刚刚创建了条目,使用map的operator []:
是安全的mymap[s].push_back( d );
答案 2 :(得分:0)
我想这就是你想要做的:
您需要使用getline()
逐行浏览文件,而不是将用于getline的缓冲区转换为字符串,并使用正则表达式检查它是路径还是数据库名称(您可以使用文件格式更详细,以更清楚地表达或使用XML)。然后调用相应的函数添加到地图中。
在伪代码中假设每个db只有路径:
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();
现在懒得写一个工作版......
答案 3 :(得分:0)
您需要的是名称(字符串)到路径列表(字符串)的映射。您需要做的就是声明:std :: map&lt; std :: string,std :: list&lt;的std :: string&GT;取代。馅饼很简单: - )
试试这个:
#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");
}