我将我从正则表达式匹配中获得的结果存储在 unordered_map 中。std::cout 子匹配 m[1].str() 和 m[2].str() 正确显示对键值。
尽管当我将它们存储在 unordered_map 中时,我总是会收到一个异常报告,报告找不到密钥。这是代码:
boost::unordered::unordered_map<std::string, std::string>
loadConfigFile(std::string pathToConfFile) throw(std::string){
std::fstream fs;
fs.open(pathToConfFile.c_str());
if(!fs)
throw std::string("Cannot read config file.");
boost::unordered::unordered_map<std::string, std::string> variables;
while(!fs.eof())
{
std::string line;
std::getline(fs, line);
//std::cout << line << std::endl;
boost::regex e("^(.+)\\s*=\\s*(.+)");
boost::smatch m; //This creates a boost::match_results
if(boost::regex_match(line, m, e)){
std::cout << m[1].str() << " " << m[2].str() << std::endl;
variables[m[1].str()] = m[2].str();
}
}
std::cout << variables.at(std::string("DEPOT_PATH")) << std::endl; //Here I get the exception
return variables;
}
DEPOT_PATH 是配置文件中“变量”的名称。std::cout << m[1].str() 完美显示它,但在 unordered_map 中找不到。有任何想法吗?