【发布时间】:2015-01-23 17:43:05
【问题描述】:
所以,假设我们有两个向量,vec1 和 vec2。仅对两个向量中的元素执行某些操作的最快方法是什么。 到目前为止,我已经做到了。简单来说,我们如何才能更快地实现这一点,或者有什么办法:
vector<Test*> vec1;
vector<Test*> vec2;
//Fill both of the vectors, with vec1 containing all existing
//objects of Test, and vec2 containing some of them.
for (Test* test : vec1){
//Check if test is in vec2
if (std::find(vec2.begin(), vec2.end(), test) != vec2.end){
//Do some stuff
}
}
【问题讨论】:
-
向量是否已排序?可以使用其他数据结构吗?
-
@Borgleader 即使它们不是,你也可以在 O(nlogn+mlogm) 时间内稳定地对它们进行排序,这肯定比 O(n*m) 更胜一筹
-
如果这些已排序,
std::upper_bound会很有帮助。如果没有,有很多方法可以做到这一点,std::unordered_set<Test*>是值得考虑的一种方法。 -
@WhozCraig 如果它们已排序,您可以使用
std::set_union -
@IdeaHat 是的,
<algorithms>中的设置操作继续躲避我,因为我很少使用它们。一个很好的观点。顺便说一句,你的意思是std::set_intersection?