我在元组向量中查找元组元素时遇到问题。
我有一个 vector<tuple<int,int,int,int>>
我需要找到向量中的位置 get<0>(vector) = 0
。我需要该位置,因为我还需要从该位置的元组中提取其他值。
get<0>
的值是唯一的,并且只会在向量中出现一次。
我怎么做?
原文由 Lamda 发布,翻译遵循 CC BY-SA 4.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 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
您应该使用
std::find_if
算法;