В SQL есть функция сказать что-то вроде
SELECT TOP 20 distance FROM dbFile ORDER BY distance ASC
Если мой SQL правильный, скажем, 10 000 записей, это должно вернуть 20 наименьших расстояний в моей базе данных.
У меня нет базы данных. У меня есть простой массив размером 100 000.
Есть ли контейнер С++, Boost, MFC или STL, который предоставляет простой код для структуры типа
struct closest{
int ID;
double distance;
closest():ID(-1), distance(std::numeric_limits<double>::max( )){}
};
Где я могу создать сортированный контейнер расстояния, например
boost::container::XXXX<closest> top(20);
И тогда у вас есть простой
top.replace_if(closest(ID,Distance));
Если контейнер заменит запись с текущим максимальным расстоянием в моем контейнере с моей новой записью, если она меньше текущего максимального расстояния в моем контейнере.
Я не беспокоюсь о скорости. Мне нравятся элегантные чистые решения, где контейнеры и код делают весь тяжелый подъем.
ИЗМЕНИТЬ. Добавление после всех отличных ответов.
То, что я действительно хотел бы найти, благодаря своей элегантности. Является сортированным контейнером, который я могу создать с ограничением размера контейнера. В моем случае 20. Тогда я мог бы нажимать или вставлять в мои сердца содержимое 100 000 предметов или больше. Но. Всегда есть, но. Контейнер должен поддерживать максимальный размер 20 путем замены или не вставки элемента, если его значение компаратора не было в пределах самых низких значений.
Да. Теперь я знаю из всех этих ответов, что при программировании и настройке существующих контейнеров можно добиться такого же эффекта. Возможно, когда следующий раунд предложений для Комитета по стандартам C и С++ сидит. Мы могли бы предложить. Самостоятельная сортировка (которую мы вроде уже имеем) и контейнеры с ограничением размера.