C++ 提高比较向量元素的运行时复杂性的效率?

C++ 提高比较向量元素的运行时复杂性的效率?,c++,big-o,C++,Big O,我有两个向量: std::vector<int> V1 {1,2,3,4,5,6,7}; std::vector<int> V2 {1,2,3}; 您将需要在线性时间保持一个数组(您的源数组显然是从第0个元素搜索到第n个元素) 但是,您可以通过确保搜索空间的内容首先排序,来降低另一个搜索项。这将允许使用具有对数(n)复杂性的二进制搜索算法 祝你好运 例如: std::vector<int> V1 {1,4,5,6,3}; std::vector<int

我有两个向量:

std::vector<int> V1 {1,2,3,4,5,6,7};
std::vector<int> V2 {1,2,3};

您将需要在线性时间保持一个数组(您的源数组显然是从第0个元素搜索到第n个元素)

但是,您可以通过确保搜索空间的内容首先排序,来降低另一个搜索项。这将允许使用具有对数(n)复杂性的二进制搜索算法

祝你好运

例如:

std::vector<int> V1 {1,4,5,6,3};
std::vector<int> V2 {100, 104,101,3};
bool condition {false};
std::sort(V2.begin(), V2.end());

for(auto IT = V1.begin(); IT != V1.end(); IT++)
{
  auto result {std::binary_search(V2.begin(), V2.end(), *IT)};
  if(result > 0){ condition = true};
}
std::向量V1{1,4,5,6,3};
std::向量V2{100104101,3};
布尔条件{false};
排序(V2.begin(),V2.end());
for(auto IT=V1.begin();IT!=V1.end();IT++)
{
自动结果{std::binary_search(V2.begin(),V2.end(),*IT)};
如果(结果>0){condition=true};
}

定义“比较向量元素”对您的意义。具体解释当任一向量包含重复值时的预期结果。如果知道向量是有序的,则二进制搜索速度更快。可能使用std::set和compare set?集合和地图中的红黑树提供了与您类似的出色性能和合适的用例。或者,按照建议,先对向量排序。蒙扎,我的编辑行吗?有什么需要添加的吗?只需要添加一点,在进行两个向量的交集时,最好用较少的元素对向量进行排序。
for(auto IT = V1.begin(); IT != V1.end(); IT++)
{
  std::find(V2.begin(), V2.end(), *IT);
}
std::vector<int> V1 {1,4,5,6,3};
std::vector<int> V2 {100, 104,101,3};
bool condition {false};
std::sort(V2.begin(), V2.end());

for(auto IT = V1.begin(); IT != V1.end(); IT++)
{
  auto result {std::binary_search(V2.begin(), V2.end(), *IT)};
  if(result > 0){ condition = true};
}