C++的std::map查询很慢的原因
std::map<std::string, vector<vector<std::string>>>::iterator it;
it = mCsvDict.find(csvFilePath);
if (it == mCsvDict.end()) {
//如果配置文件的数据不存在,则加载配置文件
loadFile(csvFilePath);
it = mCsvDict.find(csvFilePath);
}
auto csvStrList = it->second;
/* 获取第iRow行数据 */
vector<std::string> rowArr = csvStrList.at(iRow);
static std::string colStr = "";
if(int(rowArr.size()) > iCol) {
/* 获取第iCol列数据 */
colStr = rowArr.at(size_t(iCol));
}
return colStr;
以上代码,使用了std::map,运行起来很慢。
仔细看了一下,原因就是auto csvStrList = it->second;这一句,这里不是引用,而是拷贝,所以会很慢。
改良方案,就是直接用it->second就好了。
std::map<std::string, vector<vector<std::string>>>::iterator it;
it = mCsvDict.find(csvFilePath);
if (it == mCsvDict.end()) {
loadFile(csvFilePath);
it = mCsvDict.find(csvFilePath);
}
/* 获取第iRow行数据 */
vector<std::string> rowArr = it->second.at(iRow);
static std::string colStr = "";
if(int(rowArr.size()) > iCol) {
/* 获取第iCol列数据 */
colStr = rowArr.at(size_t(iCol));
}
return colStr;