D
Disc Magnet
I have written this short piece of code to try out std::sort()
function.
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
vector<string> lines;
lines.push_back("apple");
lines.push_back("mango");
lines.push_back("bat");
lines.push_back("cake");
lines.push_back("acid");
lines.push_back("brick");
lines.push_back("base");
vector<string>::iterator itr;
cout << "Before sorting" << endl;
int i = 0;
for (itr = lines.begin(); itr != lines.end(); itr++) {
cout << i << ") " << *itr << endl;
i++;
}
cout << endl;
std::sort (lines.begin(), lines.end());
cout << "After sorting" << endl;
i = 0;
for (itr = lines.begin(); itr != lines.end(); itr++) {
cout << i << ") " << *itr << endl;
i++;
}
}
This runs fine when I compile using g++ on Linux. Here is the output:
$ ./a.out
Before sorting
0) apple
1) mango
2) bat
3) cake
4) acid
5) brick
6) base
After sorting
0) acid
1) apple
2) base
3) bat
4) brick
5) cake
6) mango
But if I try to compile this on Visual Studio 2005, I get an error
like this:
1>main.cpp
1>./src/main.cpp(24) : error C2679: binary '<<' : no operator found
which takes a right-hand operand of type
'std::basic_string<_Elem,_Traits,_Ax>' (or there is no acceptable
conversion)
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>,
1> _Ax=std::allocator<char>
1> ]
Line 24 is this line: cout << i << ") " << *itr << endl;
So, I comment out both the cout statements which try to print *itr and
then I get this error during compilation:
1>c:/Program Files/Microsoft Visual Studio 8/VC/include/
algorithm(2677) : error C2784: 'bool std:perator <(const
std::vector<_Ty,_Alloc> &,const std::vector<_Ty,_Alloc> &)' : could
not deduce template argument for 'const std::vector<_Ty,_Alloc> &'
from 'std::basic_string<_Elem,_Traits,_Ax>'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>,
1> _Ax=std::allocator<char>
1> ]
Could someone please help me to get this working?
function.
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
vector<string> lines;
lines.push_back("apple");
lines.push_back("mango");
lines.push_back("bat");
lines.push_back("cake");
lines.push_back("acid");
lines.push_back("brick");
lines.push_back("base");
vector<string>::iterator itr;
cout << "Before sorting" << endl;
int i = 0;
for (itr = lines.begin(); itr != lines.end(); itr++) {
cout << i << ") " << *itr << endl;
i++;
}
cout << endl;
std::sort (lines.begin(), lines.end());
cout << "After sorting" << endl;
i = 0;
for (itr = lines.begin(); itr != lines.end(); itr++) {
cout << i << ") " << *itr << endl;
i++;
}
}
This runs fine when I compile using g++ on Linux. Here is the output:
$ ./a.out
Before sorting
0) apple
1) mango
2) bat
3) cake
4) acid
5) brick
6) base
After sorting
0) acid
1) apple
2) base
3) bat
4) brick
5) cake
6) mango
But if I try to compile this on Visual Studio 2005, I get an error
like this:
1>main.cpp
1>./src/main.cpp(24) : error C2679: binary '<<' : no operator found
which takes a right-hand operand of type
'std::basic_string<_Elem,_Traits,_Ax>' (or there is no acceptable
conversion)
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>,
1> _Ax=std::allocator<char>
1> ]
Line 24 is this line: cout << i << ") " << *itr << endl;
So, I comment out both the cout statements which try to print *itr and
then I get this error during compilation:
1>c:/Program Files/Microsoft Visual Studio 8/VC/include/
algorithm(2677) : error C2784: 'bool std:perator <(const
std::vector<_Ty,_Alloc> &,const std::vector<_Ty,_Alloc> &)' : could
not deduce template argument for 'const std::vector<_Ty,_Alloc> &'
from 'std::basic_string<_Elem,_Traits,_Ax>'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>,
1> _Ax=std::allocator<char>
1> ]
Could someone please help me to get this working?