我对 C++ 地图有一个奇怪的问题。
首先,我将文件名作为键插入,将递增的整数作为值插入:
int getdir (const char* dir, map<const char*, int> &filemap)
{
DIR *dp;
struct dirent *dirp;
if((dp = opendir(dir)) == NULL)
{
cout << "Error(" << errno << ") opening " << dir << endl;
return errno;
}
int index = 0;
while ((dirp = readdir(dp)) != NULL)
{
string temp1(dir);
string temp2(dirp->d_name);
if(!isalpha(temp2[0]))
{
continue;
}
filemap[dirp->d_name] = index;
index++;
}
closedir(dp);
return 0;
}
然后在另一个函数中,我尝试通过以下代码片段查找此映射以查找某个文件名是否存在:
stringstream ss(firststr);
string sourceid;
getline(ss, sourceid, ':');
sourceid = sourceid+".txt";
if(filemap.find(sourceid.c_str())!=filemap.end())
{
cout<<"found"<<endl;
}
我检查了 sourceid.c_str() 是否与文件映射中的某个键相同,但不会在映射中找到。
相反,如果我将元素插入地图的方式更改为以下(其余相同):
...
string temp1(dir);
string temp2(dirp->d_name);
...
filemap[temp2.c_str()] = index; //previously is filemap[dirp->d_name] = index;
index++;
然后可以在其他功能的地图中找到某个键。但是问题是文件映射仅包含最后一个元素,其大小为 1。似乎映射的键被覆盖,因此最后映射包含“last_element => last_index”。
我已经调试了很长时间,但仍然无法解决。任何帮助表示赞赏。