📜  在成对的向量中搜索 c++ (1)

📅  最后修改于: 2023-12-03 15:23:32.959000             🧑  作者: Mango

在成对的向量中搜索 C++

在 C++ 中,我们通常使用 std::vector 来存储数据,并且如果要查找某个元素在向量中的位置,可以使用 std::find 算法。但是,当我们需要在成对的向量中查找某个元素对应的另一个元素时,该如何实现?

使用 std::find_if

我们可以使用 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;
}

上面的代码演示了如何在 v1v2 这两个向量中查找 (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 对象的向量中查找 x3Pair 对象,并输出该 Pair 对象的 xy 值。

总结

通过以上的两种方法,我们可以在成对的向量中查找某个元素对应的另一个元素。其中,第一种方法需要使用 std::find_if 和一个自定义的谓词,而第二种方法则需要使用自定义结构体。