В основном, один из способов сделать это, используя find_if
:
bool find(int x, int y, std::vector<std::vector<int>> v) {
return v[0].end() != std::find_if(v[0].begin(), v[0].end(),
[x, y, second_vec = v[1].data(), first_data_addr = v[0].data()](int &val) {
return (x == val) && (y == *(second_vec + (&val - first_data_addr)));
});
}
Аналогично, но без путаницы с адресами:
bool find(int x, int y, std::vector<std::vector<int>> v) {
return v[0].end() != std::find_if(v[0].begin(), v[0].end(),
[x, y, second_vec = v[1].data()](int &val) mutable {
static int j;
auto ans = (x == val) && (y == *(second_vec + j));
j++;
return ans;
});
}