如何使用时间复杂度优于O(n ^ 2)的STL向量和STL算法进行左连接?

我有2个向量,包含,让我们说Person(姓名,姓氏等)对象。我想取一个向量(让它命名为“大”)然后对于这个向量中的每个元素在第二个中找到对应的元素(“小”)并将一些数据从“小”向量元素合并到“大”向量元件。此操作与SQL术语中的左连接非常相似,但具有额外的数据合并。最简单的方法是进行2个循环,但这将导致O(n ^ 2)时间复杂度。我可以用STL算法做得更好吗?     
已邀请:
如果对小向量进行排序,则可以通过扫描大向量获取合并部分的O(n log n),并使用binary_search查找小向量中的元素。     
是! 您可以在O(nlogn)时间复杂度中执行此操作。对第二个向量进行排序,需要O(nlogn)时间。对于第一个向量中的每个元素,使用二分搜索(STL具有binary_search算法)在第二个元素中找到对应的元素,并将数据合并到第一个向量中的元素。对于第一个向量中的每个元素,我们花费O(logn)时间。因此,这种方法的运行时间复杂度为O(nlogn)。     
如果您的列表不经常更改,您可以对两个列表进行排序,然后通过简单地遍历两个列表以线性时间进行合并。 如果您的列表一直在变化,那么最好将“小”容器分类,例如
map
set
。在这种情况下,只需在要加入的大列表中的每个项目的集合上使用
find
。     

要回复问题请先登录注册