C++ STL 映射同时更新所有值

tuc*_*ion 1 c++ stl

我需要在 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)

Vla*_*cow 5

在任何情况下,您都必须“手动”执行此操作。:)

这是一个演示程序

#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

  • 也许还提到 `std::transform` 和 `std::apply` :) (4认同)