Нахождение “лучше всего соответствия ключу” для данного ключа в отсортированном контейнере STL

Если вы загружаете содержимое файла, вы не должны размещать HTML-элементы вокруг него.

Вы также можете отправлять только одно изображение за раз, поэтому нет смысла зацикливаться.

<?php
include("sql.php");
//$sql = "SELECT * FROM filesdb WHERE fileid = 5";
$id = 

Если вы загружаете содержимое файла, вы не должны размещать HTML-элементы вокруг него.

Вы также можете отправлять только одно изображение за раз, поэтому нет смысла зацикливаться.

[110]GET['id']; // do some validation here to ensure id is safe $sql = "SELECT dbforfile FROM filesdb WHERE fileid =$id"; $result = $conn->query($sql); if ($result->num_rows > 0) { header('content-type: image/jpeg'); $row = $result->fetch_assoc(); echo $row['dbforfile']; }
7
задан foraidt 20 October 2008 в 14:43
поделиться

3 ответа

Я использовал бы набор:: lower_bound для нахождения соответствия или большего значения затем постепенно уменьшите итератор для проверки следующего нижнего значения. Необходимо использовать станд.:: набор, а не станд.:: карта, так как Ваш ключ встраивается в объект - необходимо будет обеспечить функтор, который сравнивает участников метки времени.

struct TimestampCompare
{
    bool operator()(const STimestampedData & left, const STimestampedData & right) const
    {
        return left.m_timestamp < right.m_timestamp;
    }
};
typedef std::set<STimestampedData,TimestampCompare> TimestampedDataSet;

TimestampedDataSet::iterator FindClosest(TimestampedDataSet & data, STimestampedData & searchkey)
{
    if (data.empty())
        return data.end();
    TimestampedDataSet::iterator upper = data.lower_bound(searchkey);
    if (upper == data.end())
        return --upper;
    if (upper == data.begin() || upper->m_timestamp == searchkey.m_timestamp)
        return upper;
    TimestampedDataSet::iterator lower = upper;
    --lower;
    if ((searchkey.m_timestamp - lower->m_timestamp) < (upper->m_timestamp - searchkey.m_timestamp))
        return lower;
    return upper;
}
7
ответ дан 6 December 2019 в 15:36
поделиться

Я использовал бы equal_range также для такой вещи.

При использовании вида () каждый раз на векторе, могло бы быть лучше использовать карту (или установить), поскольку это всегда сортируется автоматически, и используйте участника equal_range

Но это зависит от сумма вставок / запросы / объем данных. (хотя для чего-то, что всегда должно сортироваться, когда я запрашиваю, карта была бы моим предпочтительным вариантом, и я только использовал бы вектор, если бы было очень серьезное основание),

7
ответ дан 6 December 2019 в 15:36
поделиться

В зависимости от того, каково Ваше использование, Вы могли сделать простой линейный поиск вместо вида. Придумайте функцию "расстояния", цикл посредством отслеживания лучшего соответствия до сих пор и его расстояние. Когда Вы находите лучшее соответствие, забываете предыдущее и сохраняете новое и его расстояние. Когда Вы циклично выполнились через все, у Вас есть свое соответствие.

Это удается, чтобы быть O (N*S), где N является количеством объектов в векторе, и S является количеством поисков.

Вашим текущим путем является O ((N+S)*LogN), который больше, если количество поисков является небольшим и ограничено. Иначе вид / двоичный поиск лучше.

0
ответ дан 6 December 2019 в 15:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: