【问题标题】:find() method getting time to search- c++find() 方法获得时间来搜索 - c++
【发布时间】:2017-07-10 12:34:34
【问题描述】:
map<int, GCCollectedInfo*>::iterator it_cltd = m_gcColtedInfoMap->find(locatn);
if (it_cltd != m_gcColtedInfoMap->end())
{        
    vector<ObjectID>::iterator findIter = find(it_cltd->second->m_gcCollectedlist2->begin(), it_cltd->second->m_gcCollectedlist2->end(), objectID);

    if (findIter != it_cltd->second->m_gcCollectedlist2->end())
     {}
}

我在回调方法中写了这行代码,可能我的向量大小是50000(或多或少)。当我尝试在我的应用程序中使用此代码时,加载时间比正常情况多 20 秒。有没有其他方法可以在向量或列表中查找元素?

【问题讨论】:

  • 数据排序了吗?
  • 你是绑定向量还是列表?你能把它改成不同的吗?
  • 在向量中搜索很慢( O(n) )。所以你在一个不是很小的向量中搜索两次。我也不知道您的相等运算符的复杂性。为了提高速度,如果可能,请使用另一个容器,例如 unordered_map
  • @acraig5075 否。数据以未排序的格式存储。
  • @KjMag 我在我的代码中使用了向量。在这种情况下哪个 stl 库更好?

标签: c++ windows stl


【解决方案1】:

如果每个 50000 的查找都是常规的,那么最好排序并使用 std::binary_search

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-02
    • 1970-01-01
    相关资源
    最近更新 更多