count_if bind2nd greater<string> = error???
In the code below I'm trying to cound the number of times a string
reater than B occours with count_if and bind2nd.
The example on ints in vector vi works fine.
But the code for the string case does not compile. I'm *sure* this
should work, but I just cannot see what is wrong.
Could someone point me in the right direction pls - I'm tearing my
hair out.
Compiler is Visual Studio 2005 SP2
-----------------------------------------
#include <iostream>
#include <vector>
#include <functional>
#include <algorithm>
using namespace std;
int main()
{
std::vector<std::string> s;
vector<int> vi;
// fill vectors
std::cout << std::count_if(
vi.begin(),
vi.end(),
std::bind2nd(std::greater<int>(),1));
std::cout << std::count_if(
s.begin(),
s.end(),
std::bind2nd(std::greater<string>(),"B")); //
compile error here ???
return 0;
}
end the error is :
1>------ Build started: Project: TopCoder_Arena, Configuration: Debug
Win32 ------
1>Compiling...
1>TopCoder.cpp
1>g:\program files\microsoft visual studio 8\vc\include
\functional(132) : error C2784: 'bool std::operator >(const
std::vector<_Ty,_Alloc> &,const std::vector<_Ty,_Alloc> &)' : could
not deduce template argument for 'const std::vector<_Ty,_Alloc> &'
from 'const std::string'
1> g:\program files\microsoft visual studio 8\vc\include
\vector(1285) : see declaration of 'std::operator >'
1> g:\program files\microsoft visual studio 8\vc\include
\functional(131) : while compiling class template member function
'bool std::greater<_Ty>::operator ()(const _Ty &,const _Ty &) const'
1> with
1> [
1> _Ty=std::string
1> ]
1> g:\code\c++\visual studio projects\topcoder_arena
\topcoder.cpp(20) : see reference to class template instantiation
'std::greater<_Ty>' being compiled
1> with
1> [
1> _Ty=std::string
1>