#include <iostream>
#include "map"
#include "string"
#include "fstream"
std::map<int,std::string> readImageNetLabel(const std::string &fileName)
{
std::map<int,std::string> imagenetLabel;
std::ifstream file(fileName);
if (!file.is_open())
{
std::cout<<"read file error"<<fileName<<std::endl;
}
std::string strLine;
int lineCount=0;
while (getline(file,strLine))
{
int pos1=strLine.find(":");
std::cout<<"pos1:"<<pos1<<std::endl;
std::string first=strLine.substr(0,pos1);
std::cout<<"first: "<<first<<std::endl;
int pos2=strLine.find_last_of("'");
std::cout<<"pos2:"<<pos2<<std::endl;
std::string second=strLine.substr(pos1+3,pos2-pos1-3);
imagenetLabel.insert({atoi(first.c_str()),second});
lineCount++;
std::cout<<"lines:"<<lineCount<<std::endl;
}
file.close();
return imagenetLabel;
}
int main()
{
const std::string fileDir="D:\\CPlusPlus\\...\\ghostnet\\label.txt";
std::map<int,std::string> label;
label= readImageNetLabel(fileDir);
std::map<int,std::string>::iterator iter;
for(iter=label.begin();iter!=label.end();iter++)
{
std::cout<<"key: "<<iter->first<<" value: "<<iter->second<<std::endl;
}
}
其中label.txt内容如下:
0: 'close'
1: 'open'
注:
label.txt文本中不可以存在空行,否则会报以下错误:
terminate called after throwing an instance of 'std::out_of_range'
what(): basic_string::substr: __pos (which is 2) > this->size() (which is 0)
错误情形:
0: 'close'
1: 'open'