我有一个 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);
}
然后我执行了另一个函数,它删除了 unordered_set 中大约 85% 的元素。(要删除的元素取决于此函数的逻辑,但这并不重要,因为所有元素最初都是按顺序插入的)。
现在,在擦除 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--;