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;