从unordered_set中获取最后一个元素

Get Last element from unordered_set

本文关键字:获取 最后一个 元素 set unordered      更新时间:2023-10-16

我需要从unordered_set中获取最后一个元素,并且它必须使用unordered_set,而不是任何其他类。(主要是因为我要修改很多已经完成的代码),但根据我一直在寻找的唯一可能的方法是迭代它并保存元素,然后返回它。但在大型电视中,速度太慢了。此外,我试过这个,但没有工作。

unordered_set <int>::iterator it = frames.end();
--it;

我得到了以下错误:"没有匹配'operator——' in '——it'"

之所以有用,主要是因为它以"堆栈"的方式存储数据,如下所示:

unordered_set<int> s;
s.insert(9);
s.insert(4);
s.insert(8);
s.insert(0);
s.insert(1);
unordered_set<int>::iterator it = s.end();
for( it = s.begin();  it!= s.end(); ++it )
    cout << *(it) << " ";

打印:"1 0 8 4 9"

所以"最后一个"元素总是9,它是插入的"第一个"元素,正如我之前所说的,以"堆栈"的方式。

有什么改进的办法吗?

unordered_set中,插入的顺序不一定与迭代该集合时得到的顺序相对应(因此名称为&;unordered&;)。在此数据结构中不支持双向迭代器(使用操作符)的部分原因是,当您不知道将从中得到的元素的顺序时,能够在unordered_set上向后/向前移动并没有任何区别。

您创建的插入的顺序并不决定您在迭代(插入"9")时将获得的顺序。First并不意味着s.end()会返回一个"9")。这是因为指令顺序完全取决于该集合如何计算您插入的每个对象的哈希值,类似于哈希表。因此,您不能可靠地使用这个集合来复制"堆栈",因为这不是这个特定数据结构的用途。

您可以使用其他c++ STL数据结构来保持顺序,例如std::stack