Функция разделения COUNT () OVER возможна с использованием DISTINCT

Есть причина, по которой хеш отсутствует unordered_set. По умолчанию unordered_set является изменчивой последовательностью. Хэш должен иметь такое же значение, пока объект находится в unordered_set. Таким образом, ваши элементы должны быть неизменными. Это не гарантируется с помощью модификатора const&, так как это только гарантирует, что только основной unordered_set и его методы не изменят sub- unordered_set. Не использовать ссылку может быть безопасное решение (вам все равно придется писать хеш-функцию), но действительно ли вам нужны накладные расходы на перемещение / копирование unordered_set s?

Вместо этого вы можете использовать какой-то вид указателя. Это отлично; указатель - это только адрес памяти, и ваш unordered_set сам не перемещается (он может перераспределить свой пул элементов, но кому это нужно?). Поэтому ваш указатель является постоянным, и он может удерживать один и тот же хэш для своего времени жизни в unordered_set. ( EDIT : как указал Говард, вы должны убедиться, что любой элемент вашего заказа хранится для вашего набора, если два набора имеют одинаковые элементы, они считаются равными. Выполняя заказ в том, как вы храните свой целые числа, вы легко получаете, что два набора соответствуют двум равным векторам.)

В качестве бонуса теперь вы можете использовать интеллектуальный указатель внутри самого основного набора для управления памятью sub- unordered_set, если вы

Обратите внимание, что это еще не самая эффективная реализация, чтобы получить набор наборов int. Чтобы сделать вас подмножествами, вы можете написать краткую обертку вокруг std::vector, которая хранит int, упорядоченную по значению. int int являются малыми и дешевыми для сравнения, а использование дихотомического поиска является только O(log n) по сложности. A std::unordered_set - это тяжелая структура и то, что вы теряете, перейдя от O(1) до O(log n), вы получите его обратно, имея компактную память для каждого набора. Это не должно быть слишком сложно реализовать, но почти гарантированно будет лучше в производительности.

Более сложное решение будет включать в себя trie .

63
задан gotqn 28 November 2018 в 11:18
поделиться