gpt4 book ai didi

c++ - C++迭代搜索混合类型的Map

转载 作者:行者123 更新时间:2023-12-02 09:48:44 27 4
gpt4 key购买 nike

我有大量的if语句想变成一个循环:

if (intParams.find(paramName) != intParams.end()) {
return (float)intParams.at(paramName);
} else if (floatParams.find(paramName) != floatParams.end()) {
return (float)floatParams.at(paramName);
} else if (boolParams.find(paramName) != boolParams.end()) {
return (float)boolParams.at(paramName);
}
return defaultVal;

我想将其转换为循环或折叠表达式以简化逻辑,但是这很困难,因为intParams具有 Map<string, int64_t>类型,floatParams具有 Map<string, float>类型,而boolParams具有 Map<string, bool>类型。我已经尝试通过增强,但找不到合适的东西。

我想将此简化为
for (auto& param : {intParams, floatParams, boolParams}) {
if (param.find(paramName) != param.end()) {
return (float)param.at(paramName);
}
}
return defaultVal;

让我知道我能做什么!

最佳答案

float retval=defaultVal;
auto all_maps = [&](auto&...maps){
auto one_map = [&](auto&map){
auto it = map.find(paramName);
if (it==map.end()) return false;
retval=static_cast<float>(it->second);
return true;
};
return ( one_map(maps) || ... );
};
all_maps(intParams, floatParams, boolParams);
return retval;

如果要避免分配默认值,则可以使用 optional 。

还有constexpr递归解决方案是否可行。

关于c++ - C++迭代搜索混合类型的Map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62367513/

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