vector和set的赋值,查找,定位效率问题。求解答
如果知道大小,在赋值时使用并行计算加快速度
vector<int> A(Num);
#pragma omp parallel for
for(int i = 0; i < Num; ++i)
A[i] = function1;
然后查找vector A里的最大值和所在位置。
std::vector<int>::iterator a = max_element(A.begin(), A.end());
int maxLocation= distance(A.begin(),a);
这个程序重复4万次,大概用时是15s
然后考虑到set的查找要更快,所以想用set来做。但是set不可直接访问下标,在赋值上考虑两类:
1. 直接用
set<float> B;
for(int i = 0; i < Num; ++i)
B.insert(..function1..);
2: 先得到vector A,然后把A插到 set B里
vector<float> A(Num); A用最开始的方法得到。
set<float> B;
B.insert(A.begin(),A.end());
然后,在查找最大值:
std::set<float>::iterator a = max_element(B.begin(),B.end());
int maxLocation= distance(B.begin(),a);
但是问题是,这两种办法耗时反而更多,基本都是100s。 对于2中方法 B.insert(A.begin(),A.end()); 非常耗时。
请问下应该如何处理?还是说这种情况就用vector?
因为程序中设计到反复(上百万次)查找,并确定位置,每次查找的容器都含有10万个值,但是并不是每次查找的容器内的值都不变,即也需要反复更新容器。这个情况应当如何选择?
(容器内的值并非顺序排列)
请大神指教。谢谢。