#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;
Помогите отсортировать список структур по элементам структуры (STL)
Код:
вот и с сортировкой встал незнаю как делать((
может подскажете??: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);
}
#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);
}
Можно сделать функцию сортировки под дате и передавать туда указатель на начальный и конечный элемент в группе. Т.е. выполнить сортировку по имени, а затем пройтись по списку и если находишь группу из более чем одного элеменат с одним именем выполнять для этой группы сортировку по дате. Тоже самое можно потом сделать и с размером.
Цитата: Oxaid
Как я понял, тебе надо выполнить сортировку внутри группы. Т.е. сделал сортировку по имени, а затем для группы одинаковых имен сделать сортировку, например, по дате, после этого для каждой даты по размеру.
[SIZE="2"]Не совсем так, мы просто добавляем элементы в список (в моём случае элементы это структура) и когда все элементы добавлены, то надо отсортировать этот список по имени к примеру, тоесть в функцию сортировки передать уже созданный список структур и сортировать по в (моём примере wfd->cFileName) или тоже самое по дате (wfd->fdFileDate) к примеру тоесть никаких групп как я пологаю быть не должно просто отсортировал и создал новый(или оставил прежний список) и вернул его(список)отсортированный[/SIZE]
http://www.cplusplus.com/reference/stl/list/sort.html
функцию для сравнения напишешь... и всё будет работать.
функцию для сравнения напишешь... и всё будет работать.
Цитата: Тень Пса
функцию для сравнения напишешь... и всё будет работать.
попробую может чего и получится если получится выложу как сделал))
Цитата: Тень Пса
http://www.cplusplus.com/reference/stl/list/sort.html
функцию для сравнения напишешь... и всё будет работать.
функцию для сравнения напишешь... и всё будет работать.
даже писать функцию не пришлось тока немного эту подправить немного пасиба за помосч , как полностью всё напишу то всё выложу:)