-2

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

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

我收到以下错误:“'--it' 中的 'operator--' 不匹配”

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

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,它是插入的“第一个”元素,正如我之前所说的“堆栈”方式。

有什么改进的办法吗?

4

1 回答 1

2

在 unordered_set 中,插入的顺序不一定与迭代集合时获得的顺序相对应(因此名称为“unordered”)。在此数据结构中不支持双向迭代器(使用 -- 运算符)的部分原因是,当您不知道你会从中得到的元素。

您创建的插入顺序并不决定您在迭代时将获得的顺序(首先插入“9”并不意味着 s.end() 将返回“9”)。这是因为决定该顺序的内容仅取决于该集合如何计算您插入的每个对象的哈希值,类似于哈希表 ( http://en.wikipedia.org/wiki/Hash_table )。因此,您不能可靠地使用此集合来复制“堆栈”,因为这不是此特定数据结构的用途。

还有其他 C++ STL 数据结构可用于保留顺序,例如http://www.cplusplus.com/reference/stack/

于 2013-06-09T23:36:03.537 回答