Использовать класс функторов :
#include <map>
class Comp
{
public:
Comp(int x, int y) : x(x), y(y) {}
bool operator() (int a, int b) const { /* Comparison logic goes here */ }
private:
const int x, y;
};
int main()
{
std::map<int,float,Comp> m(Comp(value1,value2));
}
Это похоже на функцию, но в форме объекта времени выполнения. Это означает, что он может иметь состояние, которое включает конфигурацию времени выполнения. Все, что вам нужно сделать, это перегрузить operator()
. Если вы определите все тела функций-членов в определении класса (как указано выше), то компилятор, вероятно, все встроит, так что производительность будет незначительной.
Если вы знаете value1
и value2
во время компиляции (т.е. если они константы времени компиляции ), вы можете использовать вместо этого шаблон функции:
template <int x, int y>
bool compare(int a, int b) { /* Comparison logic goes here */ }
int main()
{
std::map<int,float,compare<value1,value2> > m;
}