Добрый день
Пример - скопировать массив/контейнер без дубликатов но так чтобы порядок оставшихся сохранился. Напрашивается так
C++ (Qt)
template <class TVec, class TElem>
void CopyWithoutDup( const TVec & src, TVec & dst )
{
dst.clear();
std::set <TElem> theSet;
for (size_t i = 0; i < src.size(); ++i) {
const TElem & elem = src[i];
if (theSet.find(elem) != theSet.end()) continue;
theSet.insert(elem);
dst.push_back(elem);
}
}
Все вполне хорошо, ну может сделать set указателей и использовать lower_bound - но не суть. Но есть одна небольшая неприятность - это притормаживает т.к. каждый insert вызывает malloc. Понятно что "официальная доктрина" - делайте custom allocator, но это не вызывает энтузиазма. Только что все было легко и просто, а тут разбирайся с классом и все такое.
Часто вполне устраивает простейший аллокатор который распределил бы память один раз на максимально возможное число элементов в set (или др. ассоциативном контейнере), это число мне известно. Есть ли такой готовый? И, по ходу дела, как с этим в Qt контейнерах ?
Спасибо
Edit: виноват, забыл упомянуть что порядок должен быть сохранен. Исправил