📅  最后修改于: 2023-12-03 15:29:49.357000             🧑  作者: Mango
如果你是一名C++程序员,那么你一定会用到STL中的pair。它是一个非常有用的数据结构,可以帮助你存储一对值。如果你想在一个pair中查找一个特定的值,你可以使用STL中的find函数。
在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中的两个值。
如果你想在一个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函数查找对应的值。