【发布时间】:2013-06-05 14:01:38
【问题描述】:
我需要从 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,它是插入的“第一个”元素,正如我之前所说的以“堆栈”方式。
有什么改进的办法吗?
【问题讨论】:
-
定义 unordered 集合的“最后一个”元素是什么。
-
“最后一个”元素到底是什么意思?没有保证的顺序(因此得名)......
-
@templatetypedef:我相信
unordered_set只有前向迭代器(ideone.com/HmSbD3)。 -
简短的回答是,如果您需要/想要这样做,您可能想要使用
unordered_set以外的其他东西。访问最后一个迭代器的唯一方法是遍历所有其他迭代器到达那里,这显然是非常低效的。 -
@bones.felipe:
unordered_set根本不像你想的那样做。例如,在我系统上的 VS11 中,您的代码会打印“1 9 4 0 8”。在您自己的实现中添加更多数字,我几乎可以保证您不会继续看到类似堆栈的行为。
标签: c++ hash c++11 iterator set