如何通过pair.first搜索成对向量,并返回整个对?

问题描述

我有一个成对的向量,而且我还有一个可能等于向量中的 pair.first 的数字。我想使用这个数字搜索向量,然后如果它在向量中,则返回整个对。这是代码

vector<pair<size_t,size_t>> = (psuedocode) {{0,13},{1,12},{3,11}};

现在,我有一个名为 vertex 的值,它可能等于也可能不等于向量中的 pair.first 中的一个。我只有这些信息,足以满足我的目的,可以搜索向量。如果它等于 pair.first 中的一个,我想返回整个对。所以基本上我是在成对的向量中搜索。首先,而不是成对。我该如何实现?

现在,我正在使用 find 方法

vector<pair<size_t,size_t>>::iterator it = find(v.begin(),v.end(),vertex);

显然,这不起作用,因为顶点的类型是“size_t”,并且不是一对。

解决方法

std::find_if() 更适合这种情况下的工作。

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

int main() {
  std::vector<std::pair<int,int>> v{{1,2},{2,3},{3,4}};

  int vertex= 2;

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

  std::cout << it->first << "," << it->second << '\n';
}

输出:

2,3