是否可以使用运算符作为映射中的映射值

Is it possible to use an operator as a mapped value in a map?

本文关键字:映射 可以使 运算符 是否      更新时间:2023-10-16

我想做这样的事情:

int a = 9, b = 3;
map<char,operator> m;
m['+'] = +;
m['-'] = -;
m['*'] = *;
m['/'] = /;
for(map<char,operator>::iterator it = m.begin(); it != m.end(); ++it) {
    cout << func(a,b,it -> second) << endl;
}

输出如下所示:

12
6
27
3

我该怎么做?

您可以在 <functional> 中使用预制函子:

int a = 9, b = 3;
std::map<char, std::function<int(int, int)>> m;
m['+'] = std::plus<int>();
m['-'] = std::minus<int>();
m['*'] = std::multiplies<int>();
m['/'] = std::divides<int>();
for(std::map<char, std::function<int(int, int)>>::iterator it = m.begin(); it != m.end(); ++it) {
    std::cout << it->second(a, b) << std::endl;
}

每个参数都是一个具有operator()的类,该类接受两个参数并返回对这两个参数的数学运算的结果。例如,std::plus<int>()(3, 4)3 + 4基本相同。每个都存储为签名int(int, int)的函数包装器对象,然后根据需要使用两个数字进行调用。