📅  最后修改于: 2023-12-03 15:23:32.959000             🧑  作者: Mango
在 C++ 中,我们通常使用 std::vector
来存储数据,并且如果要查找某个元素在向量中的位置,可以使用 std::find
算法。但是,当我们需要在成对的向量中查找某个元素对应的另一个元素时,该如何实现?
我们可以使用 std::find_if
算法,结合一个自定义的谓词,来实现在成对的向量中查找某个元素对应的另一个元素。该自定义谓词的作用是判断当前位置的元素是否为需要查找的元素对应的元素。
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> v1 = {1, 2, 3, 4};
std::vector<int> v2 = {5, 6, 7, 8};
auto it1 = std::find(v1.begin(), v1.end(), 2); // 找到 v1 中值为 2 的元素
if (it1 != v1.end()) {
auto idx = std::distance(v1.begin(), it1); // 获取 v1 中的索引
auto it2 = std::find_if(v2.begin(), v2.end(), [&](int x){
return x == v1[idx] + 3; // 判断当前元素是否为需要查找的元素对应的元素
});
if (it2 != v2.end()) {
std::cout << "Found: (" << *it1 << ", " << *it2 << ")" << std::endl; // 输出找到的结果
}
}
return 0;
}
上面的代码演示了如何在 v1
和 v2
这两个向量中查找 (2, 5)
这个元素对应的另一个元素。具体来说,我们首先使用 std::find
算法找到 v1
中值为 2
的元素,并获取该元素在 v1
中的索引。然后,我们使用 std::find_if
算法和一个自定义的谓词,在 v2
中查找一个元素,使其等于 v1
中的这个元素加上 3
。最后,如果找到了这样一个元素,我们就输出 (2, x)
,其中 x
就是在 v2
中找到的元素。
如果我们需要在一个成对的向量中查找某个元素对应的另一个元素,考虑使用自定义结构体来存储这些成对的元素:
#include <iostream>
#include <vector>
#include <algorithm>
struct Pair {
int x, y;
};
int main() {
std::vector<Pair> v = {{1, 5}, {2, 6}, {3, 7}, {4, 8}};
auto it = std::find_if(v.begin(), v.end(), [](const Pair& p){
return p.x == 3; // 查找 x 为 3 的 Pair
});
if (it != v.end()) {
std::cout << "Found: (" << it->x << ", " << it->y << ")" << std::endl; // 输出找到的结果
}
return 0;
}
上面的代码演示了如何在 v
这个存储 Pair
对象的向量中查找 x
为 3
的 Pair
对象,并输出该 Pair
对象的 x
和 y
值。
通过以上的两种方法,我们可以在成对的向量中查找某个元素对应的另一个元素。其中,第一种方法需要使用 std::find_if
和一个自定义的谓词,而第二种方法则需要使用自定义结构体。