2010-03-29 74 views
12

有了一个载体,我可以做到以下几点:访问集合中的元素?

vector<int> myvec (4,100); 
int first = myvec.at(0); 

我有以下设置:

set<int> myset; 
myset.insert(100); 
int setint = ???? 

我如何访问我在集合插入的元素?

+1

哪些元素?为了什么目的? – GManNickG 2010-03-29 20:23:10

回答

13
set<int>::iterator iter = myset.find(100); 
if (iter != myset.end()) 
{ 
    int setint = *iter; 
} 
+1

在取消引用该迭代器之前,您应该检查'iter!= myset.end()'。 – 2010-03-29 20:19:10

+3

如果你知道你在寻找100,为什么不把100赋给'setint'? – wilhelmtell 2010-03-29 20:19:30

+0

与'vector'情况下的等价物是'vecint = * find(myvec.begin(),myvec.end(),100);' – wilhelmtell 2010-03-29 20:21:13

7

您无法按索引访问设置的元素。您必须使用迭代器访问元素。

set<int> myset; 
myset.insert(100); 
int setint = *myset.begin(); 

如果您想要的元素不是第一个元素,则将迭代器推进到该元素。您可以使用set<>::find()查看集合以查看元素是否存在,或者您可以迭代该集合以查看存在哪些元素。

+0

只有当你从组。 – UncleBens 2010-03-29 20:39:23

+0

啊,对不起。插入一个集合不会使旧的迭代器无效,并且擦除元素也不会使旧的迭代器无效(当然除了指向元素的迭代器被删除)。 – wilhelmtell 2010-03-29 20:51:47

1

您也可以使用这种方法:

set<int>:: iterator it; 
for(it = s.begin(); it!=s.end(); ++it){ 
    int ans = *it; 
    cout << ans << endl; 
}