2012-03-07 31 views
6

Tôi muốn thay đổi phần tử trong một set, vì vậy tôi đã sử dụng set<T>::iterator. Tuy nhiên, trình biên dịch lập luận "phần tử là const". Sau đó, tôi nhận ra rằng set<T>::iterator là một const_iterator ...Làm cách nào để thay đổi phần tử đã đặt?

Vì vậy, làm cách nào tôi có thể thay đổi thành phần? Xóa nó và sau đó chèn một cái mới?

Trả lời

20

Các phần tử của set sẽ được sắp xếp theo thứ tự sắp xếp. Nếu bạn được phép sửa đổi một phần tử, thì thứ tự sắp xếp này không thể được duy trì. Do đó bạn không thể sửa đổi mục. Bạn cần xóa phần tử hiện có và chèn phần tử mới.

+5

Tuy nhiên, cần lưu ý rằng một số thay đổi đối với phần tử không ảnh hưởng đến cách nó được sắp xếp. Nếu bạn muốn thực hiện thay đổi mà bạn chắc chắn không ảnh hưởng đến thứ tự sắp xếp, luôn có 'const_cast' là phương sách cuối cùng. Rủi ro và không đẹp, nhưng tuy nhiên. – jogojapan

+0

thanks.I biết điều đó. Vì vậy, đây là cách duy nhất để sửa đổi phần tử? –

+2

Vì 'xóa' không ném trừ khi mã người dùng gọi nó ném, có lẽ tốt hơn nên chèn phần tử mới và sau đó xóa phần tử cũ. Điều đó mang lại cho bạn cơ hội bảo đảm ngoại lệ mạnh mẽ. –

0

EDIT: Bạn không thể thêm phần tử vào một vị trí cụ thể trong bộ. các thiết lập nên được sắp xếp theo thứ tự bất kỳ hoạt động bạn làm. Vì vậy, bạn phải xóa phần tử cụ thể và chèn phần tử mới để thứ tự của tập hợp không bị mất.

Đồng thời đọc thêm về set!

Các vấn đề liên quan