C++比较矢量,更快的方法

C++ to compare vectors, faster way

本文关键字:方法 比较 C++      更新时间:2023-10-16

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

我正在使用 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;
                            }

是的,如果你愿意稍微改变一下你的数据结构。

加快比较速度的一种简单方法是使用校验和。我的意思是,从字面上检查总和。在构建向量时,请保持每个向量的总和(只要与数据类型一致,溢出就无关紧要)。然后,不要比较整个向量,而只比较总和 - 那么只有当总和匹配时,你才能比较向量。

为了更进一步,您可以按校验和对向量进行排序...这可能只有在你有很多向量时才是值得的,因为它将你的校验和搜索从 n 减少到 log(n)