Alex Schemm
Alex Schemm

Reputation: 35

I'm receiving a template error and I'm not sure why

I was tasked with the following assignment. The requirements (simplified) are ... Using STL containers std::list, std::vector, and std::deque, demonstrate the sorting of integers in descending order. Use std::set to create a data set of unique integers. Copy the data set to the other containers. Shuffle the containers. Display each container's contents. Use appropriate sorting algorithms to sort the data in each container. Redisplay each container's contents. Code must be written in C++

This is the code I came up with but it's throwing an error on line 20 and 30

'greater is not a template'

. I'm sure it's an easy fix that I am missing but everything I try doesn't work. Thanks for the help.

#include "stdafx.h"
#include <iostream>
#include <set>
#include <iterator>
#include <deque>
#include <list>
#include <vector>
#include <algorithm>
#include <math.h>

using namespace std;


int main()
{

    set <int, greater <int>> set1;

    set1.insert(4);
    set1.insert(5);
    set1.insert(3);
    set1.insert(6);
    set1.insert(2);
    set1.insert(5);
    set1.insert(1);

    set <int, greater <int> > ::iterator itr;
    cout << "\n/the initial set is : ";
    for (itr = set1.begin(); itr != set1.end(); ++itr)
    {
        cout << '\t' << *itr;
    }
    cout << endl;

    deque <int> deque_ex1;
    list <int> list_ex1;
    vector <int> vec_ex1;

    for (itr = set1.begin(); itr != set1.end(); ++itr)
    {
        vec_ex1.push_back(*itr);
        deque_ex1.push_back(*itr);
        list_ex1.push_back(*itr);
    }
    std::random_shuffle (vec_ex1.begin(), vec_ex1.end());
    std::random_shuffle(deque_ex1.begin(), deque_ex1.end());

    vector<int> V(list_ex1.begin(), list_ex1.end());
    std::random_shuffle(V.begin(), V.end());
    list_ex1.assign(V.begin(), V.end());

    vector <int> ::iterator itr1;
    cout << "The shuffled vector is: ";
    for (itr1 = vec_ex1.begin(); itr1 != vec_ex1.end(); ++itr1)
    {
        cout << '\t' << *itr1;
    }
    cout << endl;

    deque <int> ::iterator itr2;
    cout << "The shuffled deque is: ";
    for (itr2 = deque_ex1.begin(); itr2 != deque_ex1.end(); ++itr2)
    {
         cout << '\t' << *itr2;
    }
    cout << endl;

    list <int> ::iterator itr3;
    cout << "The shuffled list is: ";
    for (itr3 = list_ex1.begin(); itr3 != list_ex1.end(); ++itr3)
    {
        cout << '\t' << *itr3;
    }
    cout << endl;
    cout << endl;

    cout << "sorted data structures (using system defined sort function):" << endl;
    sort(vec_ex1.begin(), vec_ex1.end());
    cout << "The sorted vector is :";
    for (itr1 = vec_ex1.begin(); itr1 != vec_ex1.end(); ++itr1)
    {
        cout << '\t' << *itr1;
    }
    cout << endl;

    sort(deque_ex1.begin(), deque_ex1.end());
    cout << "The sorted Deque is: ";
    for (itr2 = deque_ex1.begin(); itr2 != deque_ex1.end(); ++itr2)
    {
        cout << '\t' << *itr2;
    }
    cout << endl;

    list_ex1.sort();
    cout << "The sorted list is: ";
    for (itr3 = list_ex1.begin(); itr3 != list_ex1.end(); ++itr3)
    {
        cout << 't' << *itr3;
    }
    cout << endl;

    return 0;
}

Upvotes: 0

Views: 50

Answers (1)

Igor Tandetnik
Igor Tandetnik

Reputation: 52471

For std::greater, you need to

#include <functional>

Upvotes: 0

Related Questions