I need to output the 5 largest files from the directory. For this, I use a boost filesystem c++. In the process of writing the program, I encountered difficulties. I can output all files from the directory, file size, file creation date and file attributes. In the vector I put the names of the files, but I just can not figure out how to sort by size. I need to output the 5 largest files from the specified directory. I think that you must first sort by file size by descending. That is, from a larger value to a smaller one. And then the scans are not needed. Most likely it needs to be done in a loop. Help me please.
    #define _CRT_SECURE_NO_WARNINGS
#include <Windows.h>
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <boost/filesystem.hpp>
using namespace std;
using namespace boost::filesystem;
void ShowAttributes(DWORD attributes);
void AttribFile(const char* str);
void Attrib();
int main(int argc, char* argv[])
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    if (argc < 2)
    {
        cout << "Using Name Directory" << endl;
        return 1;
    }
    path Part(argv[1]);
    try
    {
        if (exists(Part))
        {
            if (is_regular_file(Part))
            {
                cout << Part << " Size " << file_size(Part) << " bytes ";
                time_t Time = last_write_time(Part);
                cout << asctime(localtime(&Time)) << endl;
            }
            else if (is_directory(Part))
            {
                cout << "Directory " << Part << " include:" << endl;
                vector<string> vecList;
                for (auto j : directory_iterator(Part))
                    vecList.push_back(j.path().filename().string());
                sort(vecList.begin(), vecList.end());
                string filePath;
                for (auto i : vecList)
                {
                    cout << "    " << i;
                    filePath = Part.parent_path().string() + "/" + i;
                    if (is_regular_file(filePath))
                    {
                        if (Is_Executable_File(filePath))
                            cout << "*";
                        cout << " Size " << file_size(filePath) << " bytes ";
                        time_t Time = last_write_time(Part);
                        cout << asctime(localtime(&Time)) << endl;
                        AttribFile(filePath.c_str());
                    }
                    cout << endl;
                }
            }
        }
        else
            cout << Part << " Erroe!" << endl;
    }
    catch (const filesystem_error& ex)
    {
        cout << ex.what() << endl;
    }
    return 0;
}
void ShowAttributes(DWORD attributes)
{
    if (attributes & FILE_ATTRIBUTE_ARCHIVE)
        cout << "   archive" << endl;
    if (attributes & FILE_ATTRIBUTE_DIRECTORY)
        cout << "   directory" << endl;
    if (attributes & FILE_ATTRIBUTE_HIDDEN)
        cout << "   hidden" << endl;
    if (attributes & FILE_ATTRIBUTE_NORMAL)
        cout << "   normal" << endl;
    if (attributes & FILE_ATTRIBUTE_READONLY)
        cout << "   read only" << endl;
    if (attributes & FILE_ATTRIBUTE_SYSTEM)
        cout << "   system" << endl;
    if (attributes & FILE_ATTRIBUTE_TEMPORARY)
        cout << "   temporary" << endl;
}
void AttribFile(const char* str)
{
    DWORD attributes;
    attributes = GetFileAttributesA(str);
    ShowAttributes(attributes);
}
void Attrib()
{
    char filename[MAX_PATH];
    DWORD attributes;
    cout << "Name of file: ";
    cin >> filename;
    attributes = GetFileAttributesA(filename);
    ShowAttributes(attributes);
}
 
     
    