Unable to get std::sort working

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::eek: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?
 
G

Gert-Jan de Vos

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;
[...]
Could someone please help me to get this working?

You use std::string but didn't include <string>. Apparently gcc
#includes <string> in one of the other headers you used whereas
MSVC includes only part of the <string> contents in its headers.
Your code needs the full definition of <string> for operator<<()
and operator<(). Therefore: #include it.
 
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;
[...]
Could someone please help me to get this working?

You use std::string but didn't include <string>. Apparently gcc
#includes <string> in one of the other headers you used whereas
MSVC includes only part of the <string> contents in its headers.
Your code needs the full definition of <string> for operator<<()
and operator<(). Therefore: #include it.

Thanks! This solved the problem.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,969
Messages
2,570,161
Members
46,709
Latest member
AustinMudi

Latest Threads

Top