我需要在 C++ 中更新地图的所有值(整数)。所有值都将乘以浮点数(0.30),因此无需一一进行。
我可以手动完成,但我想知道是否有办法一次将它们全部相乘。
map < string, int >ouremployees = {
{"Haaziq", 80000},
{"Aldo", 100000},
{"Monte", 30000},
{"Carlo", 20000},
{"Afif", 50000},
// THERE ARE MORE WAY WAY MORE BUT ALL THE INT NUMBERS/ VALUES NEED TO BE //MULTIPLIED BY .30 ALL OF THEM
};
Run Code Online (Sandbox Code Playgroud)
在任何情况下,您都必须“手动”执行此操作。:)
这是一个演示程序
#include <iostream>
#include <map>
int main()
{
std::map <std::string, int> ouremployees =
{
{ "Haaziq", 80000 },
{ "Aldo", 100000 },
{ "Monte", 30000 },
{ "Carlo", 20000 },
{ "Afif", 50000 },
};
double multiplier = 0.3;
for ( auto &p : ouremployees ) p.second *= multiplier;
for ( const auto &p : ouremployees ) std::cout << p.first << ' ' << p.second << '\n';
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它的输出是
Afif 15000
Aldo 30000
Carlo 6000
Haaziq 24000
Monte 9000
Run Code Online (Sandbox Code Playgroud)
例如,您可以使用标准算法代替基于范围的 for 循环std::for_each。
例如
#include <iostream>
#include <map>
#include <iterator>
#include <algorithm>
int main()
{
std::map <std::string, int> ouremployees =
{
{ "Haaziq", 80000 },
{ "Aldo", 100000 },
{ "Monte", 30000 },
{ "Carlo", 20000 },
{ "Afif", 50000 },
};
std::for_each( std::begin( ouremployees ), std::end( ouremployees ),
[multiplier = 0.3]( auto &p ) { p.second *= multiplier; } );
for ( const auto &p : ouremployees ) std::cout << p.first << ' ' << p.second << '\n';
return 0;
}
Run Code Online (Sandbox Code Playgroud)
注意可能映射的第二个模板参数应该声明为类型参数double。