在元组向量中查找特定的元组元素?

新手上路,请多包涵

我在元组向量中查找元组元素时遇到问题。

我有一个 vector<tuple<int,int,int,int>> 我需要找到向量中的位置 get<0>(vector) = 0 。我需要该位置,因为我还需要从该位置的元组中提取其他值。

get<0> 的值是唯一的,并且只会在向量中出现一次。

我怎么做?

原文由 Lamda 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 816
2 个回答

您应该使用 std::find_if 算法;

 std::vector<std::tuple<int,int,int,int>> v =
    {{0,1,2,3},{1,2,3,4},{2,3,4,5}};

auto it = std::find_if(v.begin(), v.end(), [](const std::tuple<int,int,int,int>& e) {return std::get<0>(e) == 0;});
if (it != v.end()) {
  std::cout << "Found" << std::endl;
}

原文由 Arunmu 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以使用 std::find_if 算法循环遍历元素并测试您需要的条件。

_注意_;此处的代码假定您要在向量中查找元组的第一个元素为 0 的元素。

 #include <tuple>
#include <vector>
#include <algorithm>
#include <iostream>
int main()
{
    using namespace std;
    vector<tuple<int, int, int, int>> v;
    v.emplace_back(0,1,2,3);
    auto it = find_if(begin(v), end(v), [](decltype(*begin(v)) e) {
        return get<0>(e) == 0;
    });
    if (it != end(v))
        cout << get<0>(*it) << " " << get<1>(*it);
}

std::find_if 以上采用接受谓词的形式;

>  template< class InputIt, class UnaryPredicate >
>   InputIt find_if( InputIt first, InputIt last, UnaryPredicate p );
>
> ```

它回来了;

> 返回 \[一个迭代器到\] 范围 `[first, last)` 中满足特定条件的第一个元素...

* * *

可以使用的更简洁的语法是,但需要 C++14 及更高版本的语言支持;

find_if(begin(v), end(v), [](auto&& e) { return get<0>(e) == 0; });

”`

原文由 Niall 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题