不幸的是,我无法使用C ++ 11或Boost。
我有一些代码如下
struct Cell
{
Cell(int value) : value(value) {}
int value;
bool CompareValue(const Cell& other) const
{
return this->value < other.value;
}
};
int main()
{
const int size = 10;
vector<Cell> cells;
for (int i = 0; i < size; i++)
{
cells.push_back(Cell(rand()));
cout << "[ " << cells.back().value << " ] ";
}
cout << "\n\n";
int maxvalue = max_element(cells.begin(), cells.end(), mem_fun_ref(&Cell::CompareValue))->value;
int minvalue = min_element(cells.begin(), cells.end(), mem_fun_ref(&Cell::CompareValue))->value;
cout << "Max = " << maxvalue << "\n" << "Min = " << minvalue << "\n";
}
但现在我需要扩展比较功能以采用比较模式
bool CompareValue(const Cell& other, MODE_T mode) const
{
switch (mode)
{
...
}
}
但是,我无法弄清楚如何更新max_element的使用来使用这个新函数。每次比较运行的mode参数都是相同的。我尝试使用各种绑定和东西但无济于事。任何帮助表示赞赏。
答案 0 :(得分:0)
你可以写functor
,这样就可以了。
struct CompareCellWithMode : public std::binary_function<Cell, Cell, bool>
{
public:
result_type CompareCellWithMode
(const first_argument_type& f, const second_argument_type& s)
{
return f.CompareValue(s, mode);
}
private:
MODE_T mode;
};
MODE_T mode;
int maxvalue = max_element(cells.begin(),
cells.end(), CompareCellWithMode(mode))->value;
或std::tr1::bind
MODE_T mode;
int maxvalue = max_element(cells.begin(), cells.end(),
std::tr1::bind(&Cell::CompareValue, _1, mode))->value;