C++ STL:map,string

#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'


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值