如何通过lambda使用自定义相等来查找在std::vector中具有一个匹配元素的元组

How to use custom equality via lambda to find a tuple with one matching element in a std::vector

本文关键字:具有一 vector 有一个 元组 元素 std lambda 何通过 自定义 查找      更新时间:2023-10-16

假设我有一个std::list,看起来像这样:

std::list< std::tuple< UINT, SIZE_T, UINT > > FooList;

它没有以任何方式排序,并且给定一个UINT,我想搜索列表并查找是否有一个元组使用其最后一个元素与UINT匹配(即<*, *, UINT to Match>)。例如,如果我这样做:

FooList.emplace_back(100, 0x1000, 200); 
FooList.emplace_back(200, 0x2000, 400);
FooList.emplace_back(400, 0x4000, 800);

如果我查找400,我应该找到0x2000,但是如果我查找100,我应该什么也找不到。

我正在寻找一个解决方案使用lambda。请让我知道。谢谢。

UINT key = 400;
auto p = std::find_if(FooList.begin(), FooList.end(),
    [key](const std::tuple<UINT, SIZE_T, UINT>& t) {
        return std::get<2>(t) == key;
    });
if (p != FooList.end()) {
    // found p
} // else not found
相关文章: