std::make_heap - compilation issues ?
Hi,
I have a set with a custom ordering operator defined on it.
My goal is get 10 max elements using another ordering.
To do that I am thinking to use make_heap algorithm on the set,
supplying the begin and end iterators of the set and a new ordering
operator.
The problem is that it wont compile, this is my code :
class A;
class B {
class op1 {
public:
bool operator()(const A* const a,
A* const b) const { ...
};
};
class op2{
public:
bool operator()(const A* const a,
A* const b) const { ...
};
};
....
};
set<A*, op1>* my_set;
.....
void B:my_func() {
make_heap(my_set->begin(), my_set()->end(), op2());
}
I also tried supplying the template params, i.e.
make_heap<set<A*, op1>::iterator, op2>(my_set->begin(), my_set()-
end(), op2());
In both cases I get the following error :
c:/Program Files\Microsoft Visual Studio .NET 2003\Vc7\include
\algorithm(1150) :
error C2784: 'reverse_iterator<_RanIt>::difference_type std::operator
-(const s
td::reverse_iterator<_RanIt> &,const std::reverse_iterator<_RanIt>
&)' : could n
ot deduce template argument for 'const std::reverse_iterator<_RanIt>
&' from 'st
d::set<_Kty,_Pr>::iterator'
with
[
_Kty=A*,
_Pr=B::op1
]
c:/Program Files\Microsoft Visual Studio .NET 2003\Vc7\include
\xutility(
634) : see declaration of 'std::operator`-''
../myfile.cc(825) : see reference to funct
ion template instantiation 'void
std::make_heap<std::set<_Kty,_Pr>::iterator,B::op2>(_RanIt,_RanIt,B::op2)'
being compiled
with
[
_Kty=A*,
_Pr=B::op1,
_RanIt=std::set<A*,B::op1>::iterator
]
c:/Program Files\Microsoft Visual Studio .NET 2003\Vc7\include
\algorithm(1150) :
error C2784: 'reverse_iterator<_RanIt>::difference_type std::operator
-(const s
td::reverse_iterator<_RanIt> &,const std::reverse_iterator<_RanIt>
&)' : could n
ot deduce template argument for 'const std::reverse_iterator<_RanIt>
&' from 'st
d::set<_Kty,_Pr>::iterator'
with
[
_Kty=A *,
_Pr=B::op1
]
c:/Program Files\Microsoft Visual Studio .NET 2003\Vc7\include
\xutility(
634) : see declaration of 'std::operator`-''
c:/Program Files\Microsoft Visual Studio .NET 2003\Vc7\include
\algorithm(1150) :
error C2784: 'reverse_iterator<_RanIt>::difference_type std::operator
-(const s
td::reverse_iterator<_RanIt> &,const std::reverse_iterator<_RanIt>
&)' : could n
ot deduce template argument for 'const std::reverse_iterator<_RanIt>
&' from 'st
d::set<_Kty,_Pr>::iterator'
with
[
_Kty=A*,
_Pr=B::op1
]
c:/Program Files\Microsoft Visual Studio .NET 2003\Vc7\include
\xutility(
634) : see declaration of 'std::operator`-''
c:/Program Files\Microsoft Visual Studio .NET 2003\Vc7\include
\algorithm(1150) :
error C2784: 'reverse_iterator<_RanIt>::difference_type std::operator
-(const s
td::reverse_iterator<_RanIt> &,const std::reverse_iterator<_RanIt>
&)' : could n
ot deduce template argument for 'const std::reverse_iterator<_RanIt>
&' from 'st
d::set<_Kty,_Pr>::iterator'
with
[
_Kty=A*,
_Pr=B::op1
]
c:/Program Files\Microsoft Visual Studio .NET 2003\Vc7\include
\xutility(
634) : see declaration of 'std::operator`-''
c:/Program Files\Microsoft Visual Studio .NET 2003\Vc7\include
\algorithm(1150) :
error C2676: binary '-' : 'std::set<_Kty,_Pr>::iterator' does not
define this o
perator or a conversion to a type acceptable to the predefined
operator
with
[
_Kty=A*,
_Pr=B::op1
]
Why do I need operator- ? Operator for comparing is not enough ?
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]