📜  c++ find in pair - C++ (1)

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

c++ find in pair - C++

如果你是一名C++程序员,那么你一定会用到STL中的pair。它是一个非常有用的数据结构,可以帮助你存储一对值。如果你想在一个pair中查找一个特定的值,你可以使用STL中的find函数。

pair

在C++中,pair是一个可以同时存储两个值的结构体。在STL中,它的定义如下:

template<class T1, class T2> struct pair;

可以看到,pair是一个模板,第一个参数表示第一个值的类型,第二个参数表示第二个值的类型。你可以将任意类型的值存储在一个pair中。

下面是一个使用pair的例子:

#include <iostream>
#include <utility>

int main() {
    std::pair<int, int> p = std::make_pair(1, 2);
    std::cout << p.first << ", " << p.second << std::endl;    // 输出:1, 2
    return 0;
}

可以看到,我们使用std::make_pair()函数创建了一个pair对象,并将其第一个值设置为1,第二个值设置为2。然后,我们使用p.first和p.second分别访问pair中的两个值。

find in pair

如果你想在一个pair中查找一个特定的值,你可以使用STL中的find函数。不过,在pair中查找值并不像在vector或map中那么容易。因为 pair 并不是容器类型,它只能存储两个值,因此我们需要将pair存储在一个容器中,然后使用find函数查找对应的值。

下面是一个使用find函数查找pair中特定值的例子:

#include <iostream>
#include <utility>
#include <vector>
#include <algorithm>

int main() {
    std::pair<int, int> p1 = std::make_pair(1, 2);
    std::pair<int, int> p2 = std::make_pair(3, 4);

    std::vector<std::pair<int, int>> v = { p1, p2 };

    auto it = std::find_if(v.begin(), v.end(), [](const std::pair<int, int>& p) {
        return p.first == 3;
    });

    if (it != v.end()) {
        std::cout << "Found " << it->first << ", " << it->second << std::endl;
    }
    else {
        std::cout << "Not found" << std::endl;
    }

    return 0;
}

在这个例子中,我们创建了两个pair对象p1和p2,并将它们存储在一个vector中。然后,我们使用 find_if 函数和 lambda 表达式查找第一个值为3的pair对象。

需要注意的是,我们在 lambda 表达式中使用了引用 (&) 来避免对pair对象进行复制。如果我们不使用引用,find_if函数将对每个pair对象进行复制,导致性能下降。

总结

在C++中,pair是一个非常有用的数据结构,可以帮助你存储一对值。如果你想在一个pair中查找一个特定的值,你可以使用STL中的find函数。但是,由于pair不是容器类型,因此我们需要将pair存储在一个容器中,然后使用find函数查找对应的值。