Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум на Исходниках.RU > Borland C++ Builder/Turbo C++ Explorer > TList: как избежать дублирования элементов? |
Автор: vlad2 18.10.21, 17:21 |
Наполняю объект TList структурами: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> struct TSTR { UnicodeString Name; double DB; double DE; double Val; }; ... TList *MyList = new TList(); TSTR *pv; ... MyList->Add(new TSTR); pv = (TSTR*)(MyList->Items[MyList->Count - 1]); pv->Name = ...; pv->DB = ...; pv->DE = ...; pv->Val = ...; ... Как избежать попадание в TList структур с одинаковыми элементами, либо после заполнения его быстро удалить дубликаты? Может, есть быстрые методы для этого - типа IndexOf или Duplicates в TStringList? Спасибо. |
Автор: Славян 18.10.21, 18:52 |
Если вкратце, то - никак. А если чуть подробнее, то наиболее оптимальный способ, вроде бы, таков: 1. Придумываем правило сортировки структуры. 2. При каждом добавлении элемента, сравниваем его со всеми в поисках дубликата. 3. При непопадании в дубль аккуратно вставляем новый на нужное место. Почему оптимальный: время, затрачиваемое на анализ одного элемента, будет всё же небольшим, что положительно скажется на внешней видимости РВ (реального времени). Если же так не делать, а, скажем, проводить поиск дублей каждые 100, 1000, ... включений, то хоть это и может оказаться в сумме быстрее тех первых 'каждовключенческих', но провалы по скорости будут весьма раздражительны. Простыми словами: лучше стабильные 20 кадров/секунду, чем непонятное 'бросалово' от 5 до 60 кадров/секунду. ![]() |
Автор: vlad2 18.10.21, 19:18 |
Видимо, придётся ручками. Может, есть WinAPI-шные функции ![]() |