我正在写一个循环遍历文档 vector 的程序(特定类型,由m_docs指向)。每个文档都有一个属性,该属性是〜17000个零的 vector ,在某些情况下(循环点)会更改零。我有3200个文档。我的问题是,前100个文档处理得相当快,然后才真正变慢。我想了解为什么它会变慢,并且想知道如何解决(或至少对其进行优化)
有问题的代码部分:
for (int k = 0; k < m_docs->size(); k++) {
int pos;
std::map<std::string, std::vector<std::pair<int, int> > >::iterator it = m_index.begin();
std::map<string,int> cleanList = (*m_docs)[k].getCleantList();
for (auto const& p : cleanList) {
pos = distance(it, m_index.find(p.first));
float weight = computeIdf(p.first) * computeTf(p.first, (*m_docs)[k]);
(*m_docs)[k].setCoord(pos, weight);
}
}
最佳答案
std::map<string,int> cleanList
进入
std::map<string,int> const& cleanList
最坏的情况是,
getCleantList
已经进行了复制,并且您获得了与const&绑定(bind)的临时文件(很好)。但是更有可能的是,您减少了内存分配,因为您不再复制包含字符串pos = distance(it, m_index.find(p.first));
您调用了
m_index
变量。您可能需要改善位置(flat_map)或使用基于散列的容器(例如unordered_map)查看您的数据结构(至少
m_index
)关于c++ - For循环变慢,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27808702/