If I want to sort in descending order for exams.at (i).total.at(j)

like this..

the output
1 34
2 56
3 21

and I want to cout the output

2 56
1 34
3 21

Is it must to use bubble sort or radix sort?

#include <iostream>  // std::cout
#include <fstream>
#include <iomanip>
#include <string>    // std::string
#include <vector>    // std::vector<>
#include <algorithm> //std::for each()
using namespace std;// import "std" namespace into global namespace

	struct exam
{
	string examid;
	vector <int> total;
};

	int main() 
	{
	ifstream stream1("STA83SOLUTION.txt");
	if ( !stream1.is_open())
		{
		cout << "While opening a file an error is encountered" << endl;
		} 
			else 
			{
			cout << "Fail Di buka....." << endl;
			}
	vector <exam> exams;
	exam aExam;
    string tempExamID;
    int tempTotal;
    stream1 >> tempExamID >> tempTotal;
    aExam.examid = tempExamID;
    aExam.total.push_back(tempTotal); // add this exam code to current student's vector of exam codes
    while (stream1 >> tempExamID >> tempTotal)
    {
        if(tempExamID != aExam.examid)
        {
        exams.push_back(aExam); // no more exam codes for this student.  Add aStudent to students vector
        aExam.total.clear();
        aExam.examid = tempExamID;
        }
        aExam.total.push_back(tempTotal); // add this exam code to current student's vector of exam codes
    }
    exams.push_back(aExam); // no more exam codes for this student.  Add aStudent to students vector
    stream1.close(); // We have read the entire file, so time to close it.
{
ofstream myfile;
myfile.open("408.txt");
if (myfile.is_open())
{
for (size_t i = 0; i < exams.size(); i++) 
for (size_t j = 0; j<exams.at(i).total.size(); j++) 
{
myfile<<"\n"<<i+1<<":"<<" "<< exams.at (i).total.at(j)<<"\t"; // output list of exam codes for this student
}
}
}
cin.get();
return 0;
}

How can sort because I have two for ..which is i and j?

I do like this but abnormal program........

#include <iostream>  // std::cout
#include <fstream>
#include <iomanip>
#include <string>    // std::string
#include <vector>    // std::vector<>
#include <algorithm> //std::for each()
#include <functional>
using namespace std;// import "std" namespace into global namespace

	struct exam
{
	string examid;
	vector <int> total;
};

	int main() 
	{
		ifstream stream1("STA83SOLUTION.txt");
		if ( !stream1.is_open())
		{
		cout << "While opening a file an error is encountered" << endl;
		} 
			else 
			{
			cout << "Fail Di buka....." << endl;
			}
	vector <exam> exams;
	exam aExam;
    string tempExamID;
    int tempTotal;
    stream1 >> tempExamID >> tempTotal;
    aExam.examid = tempExamID;
    aExam.total.push_back(tempTotal); // add this exam code to current student's vector of exam codes
    while (stream1 >> tempExamID >> tempTotal)
    {
        if(tempExamID != aExam.examid)
        {
        exams.push_back(aExam); // no more exam codes for this student.  Add aStudent to students vector
        aExam.total.clear();
        aExam.examid = tempExamID;
        }
        aExam.total.push_back(tempTotal); // add this exam code to current student's vector of exam codes
    }
    
			exams.push_back(aExam); // no more exam codes for this student.  Add aStudent to students vector
			stream1.close(); // We have read the entire file, so time to close it.
			{
			ofstream myfile;
			myfile.open("408.txt"); 
			int flag = 1;    // set flag to 1 to begin initial pass
			int temp;             // holding variable
			if (myfile.is_open())
				{
				for (size_t i = 0; i < exams.size(); i++)  
				flag = 0;
					for (size_t j = 0; j<(exams.at(i).total.size()-1); j++) 
					{
					myfile<<"\n"<<i+1<<":"<<" "<< exams.at (i).total.at(j)<<"\t"; // output list of exam codes for this student
					}
				
						if (exams.at(i).total.size()+1 > exams.at(i).total.size()  )    // ascending order simply changes to <
						{ 
						temp = exams.at (i).total.at (j);             // swap elements
						exams.at (i).total.at (j) = exams.at (i).total.at (j+1);
                        exams.at (i).total.at (j+1) = temp;
                        flag = 1;               // indicates that a swap occurred.
						}
				}
			}
cin.get();
return 0;
}

Fail Di buka.....

abnormal program termination
Press any key to continue

I done something sort like this..but error..anybody can show me where is the mistake?


: missing ',' before '.'
syntax error : '.'
error C2601: 'sortit' : local function definitions are illegal
Error executing cl.exe.

#include <iostream>  // std::cout
#include <fstream>
#include <iomanip>
#include <string>    // std::string
#include <cstdlib>
#include <cstddef>
#include <vector>    // std::vector<>
#include <algorithm> //std::for each()

using namespace std;// import "std" namespace into global namespace

	struct exam
{
	string examid;
	vector <int> total;
};

	int main() 
	{
		ifstream stream1("STA83SOLUTION.txt");
		if ( !stream1.is_open())
		{
		cout << "While opening a file an error is encountered" << endl;
		} 
			else 
			{
			cout << "Fail Di buka....." << endl;
			}
	vector <exam> exams;
	exam aExam;
    string tempExamID;
    int tempTotal;
    stream1 >> tempExamID >> tempTotal;
    aExam.examid = tempExamID;
    aExam.total.push_back(tempTotal); // add this exam code to current student's vector of exam codes
    while (stream1 >> tempExamID >> tempTotal)
    {
        if(tempExamID != aExam.examid)
        {
        exams.push_back(aExam); // no more exam codes for this student.  Add aStudent to students vector
        aExam.total.clear();
        aExam.examid = tempExamID;
        }
        aExam.total.push_back(tempTotal); // add this exam code to current student's vector of exam codes
    }
    exams.push_back(aExam); // no more exam codes for this student.  Add aStudent to students vector
			stream1.close(); // We have read the entire file, so time to close it.
			{
			ofstream myfile;
			myfile.open("408.txt"); 

void sortit(int exams.at(i).total.at(j), int exams.size())
{
   
int temp;             // holding variable
if (myfile.is_open())
{	
	for (size_t i = 0; i < exams.size(); i++)  
	for (size_t j = 0; j<(exams.at(i).total.size()); j++) 
	{	
		myfile<<"\n"<<i+1<<":"<<" "<< exams.at (i).total.at(j)	<<"\t"; // output list of exam codes for this student
		if ( exams.at (i).total.at(j) < exams.at (i).total.at(j+1) )
        {
            temp = exams.at (j).total.at(j+1);
            exams.at (i).total.at(j+1) =exams.at (i).total.at(j) ;
            exams.at (i).total.at(j) = temp;
         }
    }
	
}  reversesort(num, sizeof num / sizeof *num);
   cout<<"The list in descending order is:\n";
   for ( i = 0; i < exams.size() ; ++i )
   {
      cout << num[i] << "\n";
   }
   
}}
cin.get();
return 0;
}

You can't nest functions like this:

int main()
{
[...]
            void sortit(int exams.at(i).total.at(j), int exams.size())
        {
             [...]
        }
}

So, can I combine it? void main?

un-nest the two functions:

int main()
{
    //do stuff
    some_var = sortit(.... , ... );
}

void sortit(int exams.at(i).total.at(j), int exams.size())        
{            
   //do stuff
  return something;    
}
Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.