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

时间:2014-03-03 22:12:03

标签: c++ performance vector compare

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

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

1 个答案:

答案 0 :(得分:2)

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

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

为了更进一步,您可以通过校验和对向量进行排序...如果您有很多向量,这可能是值得的,因为它会减少校验和搜索从n到log(n)