gpt4 book ai didi

c++ - std::tuple 相当于 std::pair 的第二个成员?

转载 作者:搜寻专家 更新时间:2023-10-31 02:04:25 25 4
gpt4 key购买 nike

我正在将此函数转换为使用 std::tuple没有 firstsecond成员(member)喜欢std:pair .

std::type_index argumentType(const std::string& name) const
{
return std::find_if(args_.begin(), args_.end(),
[&name](std::pair<std::string, std::type_index> arg)->bool
{
return arg.first == name;
}
)->second;
}

我对语法感到困惑 ->second ,这是在做什么?并且相当于std::get<1>(arg)

std::type_index argType(const std::string& name) const
{
return std::find_if(args_.begin(), args_.end(),
[&name](std::tuple<std::string, std::type_index, Attribute> arg)->bool
{
return std::get<0>(arg) == name;
}
)std::get<1>(arg);

示例 2:

标准::对

bool hasArg(const std::string& name) const
{
return std::find_if(args_.begin(), args_.end(),
[&name](std::pair<std::string, std::type_index> arg)->bool
{
return arg.first == name;
}
) != args_.end();
}

std::元组

bool hasArg(const std::string& name) const
{
return std::get<0>(*std::find_if(args_.begin(), args_.end(),
[&name](std::tuple<std::string, std::type_index, Attribute> arg)->bool
{
return std::get<0>(arg) == name;
}
)) != args_.end();
}

最佳答案

std::find_if返回一个迭代器到一个对,这就是为什么你需要使用箭头运算符 -> ,迭代器已重载以返回对实际值的引用以供成员访问。

是的,std::get<1> for a tuple 将做几乎相同的事情,但语法会有所不同:

auto it = std::find_if(...);
return std::get<1>(*it);

您需要使用取消引用运算符 *而不是箭头运算符,因为 std::get是一个自由函数而不是元组的成员。

关于c++ - std::tuple 相当于 std::pair 的第二个成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53522784/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com