Почему кто-либо использовал бы набор вместо unordered_set?

Я не вижу, чтобы вы использовали форму вокруг этого фрагмента. Как упоминалось здесь https://stackoverflow.com/a/5518526/6639865 , атрибут name должен быть внутри формы.

Первой попыткой было бы создать атрибут name и поместить его в форму (или использовать ajax для публикации данных)

Может быть, вы могли бы предоставить больше кода, чтобы мы могли дать вам более конкретные ответы. Что должен сделать пост? Должен ли он быть отправлен в сценарий, где что-то происходит, а затем текст возвращается с некоторыми изменениями?

134
задан xaxxon 30 July 2017 в 01:57
поделиться

8 ответов

Когда для кого-то, кто хочет перебрать элементы набора, порядок имеет значение.

209
ответ дан 23 November 2019 в 23:48
поделиться

В то время как этот ответ мог бы составить 10 лет поздно, стоит указать, что std::unordered_set также имеет оборотные стороны безопасности.

, Если хеш-функция предсказуема (это обычно имеет место, если она не применяет контрмеры, такие как рандомизированная соль), взломщики могут изготовить вручную данные, которые производят хэш-коллизии и заставляют все вставки и поиски брать O (n) время.

Это может использоваться для очень эффективных и изящных атак "отказ в обслуживании".

Многие (большинство?) реализации языков, которые внутренне используют карты хеша, столкнулись с этим:

0
ответ дан 23 November 2019 в 23:48
поделиться

Unordered sets have to pay for their O(1) average access time in a few ways:

  • set uses less memory than unordered_set to store the same number of elements.
  • For a small number of elements, lookups in a set might be faster than lookups in an unordered_set.
  • Even though many operations are faster in the average case for unordered_set, they are often guaranteed to have better worst case complexities for set (for example insert).
  • That set sorts the elements is useful if you want to access them in order.
  • You can lexicographically compare different sets with <, <=, > and >=. unordered_sets are not required to support these operations.

300
ответ дан 23 November 2019 в 23:48
поделиться

Всякий раз, когда вы предпочитаете дерево хеш-таблице.

Например, хеш-таблицы в худшем случае имеют значение «O (n)». O (1) - средний случай. В худшем случае деревья имеют размер «O ( log n)».

26
ответ дан 23 November 2019 в 23:48
поделиться

Because std::set is part of Standard C++ and unordered_set isn't. C++0x is NOT a standard, and neither is Boost. For many of us, portability is essential, and that means sticking to the standard.

6
ответ дан 23 November 2019 в 23:48
поделиться

Я бы сказал, что удобно иметь отношения, если вы хотите преобразовать их в другой формат.

Также возможно, что пока один будет быстрее для доступа время для построения индекса или памяти, используемой при создании и / или доступе к нему, больше.

1
ответ дан 23 November 2019 в 23:48
поделиться

Если вы хотите, чтобы все было отсортировано, вы должны использовать set вместо unordered_set. unordered_set используется вместо набора, когда порядок хранения не имеет значения.

1
ответ дан 23 November 2019 в 23:48
поделиться

Рассмотрим алгоритмы прямой линии. Эти алгоритмы совершенно не работают с хеш-таблицами, но прекрасно работают со сбалансированными деревьями. Чтобы дать вам конкретный пример алгоритма Sweepline, рассмотрим алгоритм фортуны. http://en.wikipedia.org/wiki/Fortune%27s_algorithm

6
ответ дан 23 November 2019 в 23:48
поделиться
Другие вопросы по тегам:

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