Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Помогите отсортировать список структур по элементам структуры (STL)

26K
21 апреля 2008 года
metal_anton
27 / / 20.04.2008
вот есть примерный класс для работы со списком структур в нём несколько методов
Код:
#ifndef __List_stl_h__
#define __List_stl_h__
#include <Windows.h>
#include <iostream>
#include <list>
#include <algorithm>
using namespace std;
class List_stl
{
public:
    List_stl ();
private:
    // структура определённая в VS
    WIN32_FIND_DATA wfd;
    // создаю  свой список с типом структуры
    list <WIN32_FIND_DATA> ListInfo;
    public:
        void GetInfoList(WIN32_FIND_DATA wf);
        void SetInfoList();
        void Sort();  
};
List_stl::List_stl()
{
}
void List_stl::GetInfoList(WIN32_FIND_DATA wf)
{    
    // присваиваю своей структуре входную  структуру
    wfd = wf;
    // добавляю в список свою  структуру
    ListInfo.push_back(wfd);       
};
// проход по списку
void List_stl::SetInfoList()
{
    list <WIN32_FIND_DATA> ::iterator PassageList = ListInfo.begin();
    while (PassageList != ListInfo.end())
    {
        cout <<PassageList->dwFileAttributes<<endl;
        cout<<ToString(PassageList->cFileName)<<endl;
        cout<<PassageList->nFileSizeHigh<<endl;
        cout<<"----------------"<<endl;
        PassageList++;   
    }
};
//а вот написать сортировку не  могу(():(
//и сортировка не  по одному полю  идёт а по нескольким полям
// типа по имени по  дате и по размеру))
void List_stl::Sort()
{
   
}
#endif;

вот и с сортировкой встал незнаю как делать((
может подскажете??:confused:
а вот может быть примерный меин добавления нового элемента в список
Код:
#include <algorithm>
#include <vector>
#include <iostream>
#include <string>
#include <Windows.h>
#include "reformulation.h"
#include "List_stl.h"
using namespace std;
bool No( string Path)
{
    if(Path == ".")return (true);
    if(Path == "..")return (true);
    return (false);
};
int main()
{
    List_stl L;
    string s("c:\\");
    s = s + "*.*";
    WIN32_FIND_DATA wf;
 // ищем всё (*) НА ДИСКЕ C:
    HANDLE hFind ;
    hFind= FindFirstFile(ToLPCTSTR(s) , &wf);
    do
    {   if(!No(ToString(wf.cFileName)))
        {      
         // вот сдесь добавляем новый элемент
                       L.GetInfoList(wf);
            }
       
    }while(FindNextFile(hFind, &wf));
    FindClose(hFind);
    L.SetInfoList();
getchar();
return(0);
}
3.0K
21 апреля 2008 года
Oxaid
63 / / 02.04.2006
Как я понял, тебе надо выполнить сортировку внутри группы. Т.е. сделал сортировку по имени, а затем для группы одинаковых имен сделать сортировку, например, по дате, после этого для каждой даты по размеру.
Можно сделать функцию сортировки под дате и передавать туда указатель на начальный и конечный элемент в группе. Т.е. выполнить сортировку по имени, а затем пройтись по списку и если находишь группу из более чем одного элеменат с одним именем выполнять для этой группы сортировку по дате. Тоже самое можно потом сделать и с размером.
26K
21 апреля 2008 года
metal_anton
27 / / 20.04.2008
Цитата: Oxaid
Как я понял, тебе надо выполнить сортировку внутри группы. Т.е. сделал сортировку по имени, а затем для группы одинаковых имен сделать сортировку, например, по дате, после этого для каждой даты по размеру.


[SIZE="2"]Не совсем так, мы просто добавляем элементы в список (в моём случае элементы это структура) и когда все элементы добавлены, то надо отсортировать этот список по имени к примеру, тоесть в функцию сортировки передать уже созданный список структур и сортировать по в (моём примере wfd->cFileName) или тоже самое по дате (wfd->fdFileDate) к примеру тоесть никаких групп как я пологаю быть не должно просто отсортировал и создал новый(или оставил прежний список) и вернул его(список)отсортированный[/SIZE]

92
21 апреля 2008 года
Тень Пса
2.2K / / 19.10.2006
http://www.cplusplus.com/reference/stl/list/sort.html

функцию для сравнения напишешь... и всё будет работать.
26K
21 апреля 2008 года
metal_anton
27 / / 20.04.2008
Цитата: Тень Пса

функцию для сравнения напишешь... и всё будет работать.


попробую может чего и получится если получится выложу как сделал))

26K
28 апреля 2008 года
metal_anton
27 / / 20.04.2008
Цитата: Тень Пса
http://www.cplusplus.com/reference/stl/list/sort.html

функцию для сравнения напишешь... и всё будет работать.


даже писать функцию не пришлось тока немного эту подправить немного пасиба за помосч , как полностью всё напишу то всё выложу:)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог