Сбой перегрузки функции в шаблонном max_element
Я смущен, что почему я не могу перегрузить "комп" для std::max_element(absMcol.begin(), absMcol.end(), comp)
в следующей функции Minvb
,
#include <cmath>
#include <vector>
#include <algorithm>
#include <iostream>
#include <iomanip>
#include <boost/numeric/interval.hpp>
#include <boost/numeric/interval/io.hpp>
bool comp(double a, double b) {
return (a < b);
}
bool comp(boost::numeric::interval<double> a, boost::numeric::interval<double> b) {
return (a.upper() < b.lower());
}
template<typename T>
void Minvb(T (&x)[2], T M[2][2], T b[2]) {
T temp1[2];
int maxrow;
T l, rhs, temp2;
for(int i = 0; i < 2; i ++) {
x[i] = 0;
}
std::vector<T> absMcol;
for(int i = 0; i < 2; ++ i) {
for(int j = i; j < 2; ++ j) absMcol.push_back(abs(M[j][i]));
maxrow = std::distance(absMcol.begin(), std::max_element(absMcol.begin(), absMcol.end(), comp) );
maxrow = maxrow + i;
absMcol.clear();
}
}
int main() {
boost::numeric::interval<double> x[2];
boost::numeric::interval<double> p11(0.74889637381797358,0.7488963738179738);
boost::numeric::interval<double> p12(0.1319999952,0.1319999952);
boost::numeric::interval<double> p21(17.152090001094443,17.152090001094461);
boost::numeric::interval<double> p22(2.7360000000000002,2.7360000000000002);
boost::numeric::interval<double> M[2][2] = {{p11,p12},
{p21,p22}};
boost::numeric::interval<double> b[2] = {p12,p22};
double xx[2];
double pp11=2.7360000000000002;
double pp12=0.47220448613138766;
double pp21=2.011999999999999;
double pp22=14.234701687428823;
double MM[2][2] = {{pp11,pp12},
{pp21,pp22}};
double bb[2] = {pp12,pp22};
Minvb(x,M,b);
Minvb(xx,MM,bb);
return 0;
}
Я получаю сообщение об ошибке:
no matching function for call to ‘max_element(std::vector< boost::numeric::interval< double>, std::allocator< boost::numeric::interval< double> > >::iterator,
std::vector< boost::numeric::interval< double>, std::allocator< boost::numeric::interval< double> > >::iterator, < unresolved overloaded function type>)’
и еще одна ошибка:
error: no matching function for call to ‘max_element(std::vector< double, std::allocator< double> >::iterator, std::vector< double, std::allocator< double> >::iterator, < unresolved overloaded function type>)’
Удаление
bool comp(double a, double b) {
return (a < b);
}
делает код работать, но это не то, что я хочу, так как я надеюсь, что max_element()
работает для обоих double
тип и boost::numeric::interval< double>
тип.
Отмечая, что я не могу перегрузить оператор<
для interval
класс, где boost::numeric::interval< double>
тип данных определен, так как я не хочу касаться <
Определение в Boost Library. Есть кто-нибудь может мне помочь? Заранее спасибо!