STL中set能不能返回指定的第几个元素的值?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STL中set能不能返回指定的第几个元素的值?相关的知识,希望对你有一定的参考价值。

比如:已知set<int> s;
s.insert(10);
s.insert(20);
s.insert(30);
现在我想得到第2个数,那么怎么返回输出啊?
谢谢!

set是集容器。它的结构特征就是里面的元素是唯一且无序。
无序意味着不便于或不能随机存取操作,就不适用“第2个”这样读。
强行去这么去获得数据,是违反STL设计初衷的。拿错了工具,拿钳子做螺丝刀的活。

如果要用于第n个这样的随机操作,请转换或直接适用Vector这样的容器。Vector的随机效率是O(1)最快。
应用stl的关键在于选择合适的容器。
参考技术A set<int>::iterator p;
int i = 0;
for(p = s.begin();p != s.end();p++,i++)

if(i == 1)//第2个数

cout<<*p; //输出
break;


追问

谢谢啊!不过我想要的是如果有很多数,比如1000000个数,想要快速的返回第k个数怎么弄啊?
如果按上面的做法肯定超时嘛。。

追答

我试过了用这样的方法我的机器取第1000000个数的时候用时0.218秒!我找不到其他的方法了。。

以上是关于STL中set能不能返回指定的第几个元素的值?的主要内容,如果未能解决你的问题,请参考以下文章

STL---set

stl之set的用法

set用法

c++/STL/map中怎样获取map中第i个元素

STL——set

STL容器 set