【问题标题】:Efficient traversing of vector of vectors and reverse mapping for faster lookup高效遍历向量的向量和反向映射以加快查找速度
【发布时间】:2022-07-01 02:56:56
【问题描述】:

我有一个返回向量向量的函数。我需要解开它并将其存储在像 unordered_map 这样的容器中,以便查找更快。

vector<ssc> SSC = getSsc();

对于来自getSsc() 的每个元素,说sid 是另一个ID 向量,比如cid。它们看起来像这样: SSC = [s1, s2, s3, s4]SCC 的每个元素就像: s1 = [c1, c2, c3, c4] s2 = [c5, c6] s3 = [c7]

如果我查询c5c6,我需要查找cid,以便它返回s2。我可以做两个 for 循环并填充一个 unordered_map 容器。但是有没有一种有效的方法来做到这一点?

c1, .... ns1, .... n 是唯一 ID。但是不同的cid 可以有相同的sid

【问题讨论】:

  • 这取决于您所说的高效,但您无法避免访问所有元素,也无法安全地将项目从多个线程插入到标准库容器中。但是,您可以计算 unordered_map 中的 cid 数和 reserve() 空间。然后性能将尽可能好,没有重新散列和 cid 数量的线性复杂性。

标签: c++ vector big-o stdvector unordered-map


【解决方案1】:

使用嵌套的 for 循环来解决问题。由于会有性能瓶颈,我使用tbb::parallel_for 来执行此操作。嵌套循环运行得非常快。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-08
    • 1970-01-01
    • 2012-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多