У меня есть unordered_set следующим образом:
unordered_set <long> valueSet;
/*the following insertion is done in order (from 1 to 10000),
*unordered_set will keep the elements based on the insertion order, right,
*just like in a vector ?
**/
for(long i = 1; i <= 10000;++i)
{
valueSet->insert(i);
}
Затем я выполнил другую функцию, которая стерла около 85% элементов в этом unordered_set.(Элементы, которые должны быть удалены, зависят от логики этой функции, но это не имеет значения, поскольку все элементы были изначально вставлены по порядку).
Теперь после стирания некоторых элементов в unordered_set,Я хочу напечатать последний элемент, который все еще остается в этом unordered_set.Например, элементы 9997, 9998, 9999 и 10000 были стерты, поэтому самый большой оставшийся элемент в этом наборе - 9996. Как это сделать?
Если используется базовый набор, я могу сделать следующее:
set <long>::reverse_iterator it = valueSet.rbegin();
cout << *it << endl;
В наборе у нас есть reverse_iterator, а также rbegin (), но его нет в unordered_set.Причина, по которой я не сделал базовый набор, заключается в том, что мне нужен размер элемента для масштабирования до 10 ^ 8.Использование обычного набора (основанного на красно-черных деревьях) действительно убьет производительность (особенно, когда речь идет о вставке и удалении).Как я могу это сделать?Копирование окончательного оставшегося unordered_set в вектор будет работать, но, конечно, это займет время.Как я могу добиться этого, используя более умный способ?Я заметил, что я также не могу сделать что-то вроде:
unordered_set <long>::iterator it = valueSet.end();
//operator -- does not exist here in the unordered_set
it--;