C++ C++;要比较向量,请使用更快的方法

C++ C++;要比较向量,请使用更快的方法,c++,performance,vector,compare,C++,Performance,Vector,Compare,是否有更快的方法从向量列表中找到特定的向量?我做向量比较,这需要永远做,我有数百万条记录 我正在使用openmp 这就是我目前所拥有的 #pragma omp parallel for for(int i=0;i<crossed.size();i++){ #pragma omp flush (exit)

是否有更快的方法从向量列表中找到特定的向量?我做向量比较,这需要永远做,我有数百万条记录

我正在使用openmp

这就是我目前所拥有的

#pragma omp parallel for
                            for(int i=0;i<crossed.size();i++){
                                    #pragma omp flush (exit)
                                    if(!exit && (crossed[i]== vectors)){

                                            loop = i;
                                            found = true;
                                            exit = true;
                                            #pragma omp flush (exit)
                                    }
                            }

                            if(found == false){
                                    crossed.push_back(vectors);
                                    cross.push_back(0);
                            }
                            else{
                                    cross[loop] = cross[loop]+1;
                            }
#pragma omp parallel for

对于(inti=0;iYes),如果您愿意稍微更改一下数据结构

加速比较的一个简单方法是使用校验和。我的意思是,逐字检查和。在构建向量时,保持每一个向量和的运行总和(只要与数据类型一致,溢出就不重要)。然后,不比较整个向量,只比较和-然后只有在和匹配时才比较向量


更进一步地说,您可以通过校验和对向量进行排序…这可能只在有很多向量的情况下才值得,因为它将校验和搜索从n减少到log(n)

你要解决什么问题?也许有一个数据结构或算法比向量向量更适合你。也许你可以对你的数据排序然后进行二进制搜索?如果你必须比较像这样的多个向量,你可能会考虑为每个向量存储哈希信息并比较散列。你仍然需要比较两个向量。向量具有相等的散列,但你可以立即剔除不同的散列,这将提高你的速度。我试图找出一个图是否同构。为了做到这一点,我必须将向量中的每个点乘以alpha,然后检查是否可以找到重复的一次。然后我计算它们,并与其他图进行比较hs来寻找非同构图。如果你们理解数学,那么找出更快的算法+1/哈希比求和更好会非常有帮助。而且,没有必要“按校验和对向量排序”-只需对单个校验和/向量id索引进行排序。每次将元素添加到向量时,都必须重新计算标准哈希值…对于数百万个元素,我认为您将损失大量时间。对于该场景,将所有元素哈希值与总和进行异或的向量哈希值是一种合理的方法…哈希方面区分了um是弱的,例如{10,-10}vs{0,0},{1,9}vs{10},而求和有助于{3,3,3}vs{3}。Trickier有O(1)cpu和mem方法来生成对顺序敏感的值,以处理插入/擦除,例如{1,3}vs{3,1},或{1,3,5}vs{5,1,3},1,3},也可能是相邻元素之间的散列中的异或异或(例如,对于上述情况,{2}对{-2},{2,2}对{-4,2})-尽管如此,还是易于取消:-(。