2010-03-29 40 views
12

Với một vector, tôi có thể làm như sau:Truy cập một phần tử trong một bộ?

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

tôi có các thiết lập sau:

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

Làm thế nào tôi có thể truy cập vào các yếu tố tôi chèn trong tập?

+1

Những yếu tố? Và vì mục đích gì? – GManNickG

Trả lời

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

Bạn nên kiểm tra 'iter! = Myset.end()' trước khi dereferencing mà iterator. –

+3

nếu bạn biết bạn đang tìm kiếm 100, tại sao không chỉ gán 100 cho 'setint'? – wilhelmtell

+0

Tương đương với trường hợp 'vectơ' là' vecint = * tìm thấy (myvec.begin(), myvec.end(), 100); ' – wilhelmtell

7

Bạn không thể truy cập các thành phần được thiết lập theo chỉ mục. Bạn phải truy cập các phần tử bằng cách sử dụng một trình lặp.

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

Nếu phần tử bạn muốn không phải là phần tử đầu tiên, hãy chuyển tiếp bộ lặp đến phần tử đó. Bạn có thể tìm trong một bộ để xem liệu một phần tử có tồn tại hay không, sử dụng set<>::find() hoặc bạn có thể lặp qua bộ này để xem những phần tử nào đang có.

+0

Các vòng lặp và vị trí của các phần tử bị vô hiệu chỉ khi bạn xóa các mục khỏi bộ. – UncleBens

+0

Ah, xin lỗi. chèn vào một tập hợp không làm mất hiệu lực các trình vòng lặp cũ và việc xóa các phần tử không làm mất hiệu lực các trình vòng lặp cũ (ngoại trừ khóa học cho các trình vòng lặp trỏ vào phần tử đã bị loại bỏ). – wilhelmtell

1

Bạn cũng có thể sử dụng phương pháp này:

set<int>:: iterator it; 
for(it = s.begin(); it!=s.end(); ++it){ 
    int ans = *it; 
    cout << ans << endl; 
} 
Các vấn đề liên quan