当前位置:  开发笔记 > 编程语言 > 正文

将函数应用于每个和lambda函数的std :: map值

如何解决《将函数应用于每个和lambda函数的std::map值》经验,为你挑选了1个好方法。

我想做这个 :

std::map mapTrafficLights;

mapTrafficLights.emplace("RED", true);
mapTrafficLights.emplace("GREEN", true);
mapTrafficLights.emplace("ORANGE", true);

std::for_each(mapTrafficLights.begin(), mapTrafficLights.end(), []
(std::pair& it) {it.second = false; });

std::for_each(mapTrafficLights.begin(), mapTrafficLights.end(), [](std::pair it) {std::cout << it.first << " " << ((it.second) ? "ON" : "OFF") << std::endl; });

如果我保留引用符号"&",则在最后一行之前的行将不会编译,但是当我删除它时,它会编译,但它不会更新我的地图的值.我想将所有布尔值设置为false,但使用STL工具将此样式的代码放在一行中.



1> juanchopanza..:

地图元素的类型是std::pair.这意味着您的lambda签名需要进行类型转换std::pair,需要创建临时对象.并且您不能将非const左值引用绑定到临时值.你需要

std::for_each(mapTrafficLights.begin(), mapTrafficLights.end(),
             [] (std::pair& it) {it.second = false; });
                           ^^^^^

或者,使用地图value_type.

typedef std::map str_bool_map;
std::for_each(mapTrafficLights.begin(), mapTrafficLights.end(),
             [] (str_bool_map::value_type& it) {it.second = false; });

请注意,对于变异范围,使用它更惯用std::transform.但是,基于范围的循环可能是最简单的解决方案:

for (auto& p : mapTrafficLights) p.second = false;

推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有