Tôi đang tìm một phương pháp hiệu quả để chọn truy cập vào từng phần tử của std::vector<T>
theo thứ tự ngẫu nhiên mà không cần thay đổi hoặc sao chép chúng. std::random_shuffle
và đảm bảo rằng mỗi phần tử chỉ được chọn một lần.Phương pháp hiệu quả để chọn ngẫu nhiên tất cả các phần tử của std :: vectơ chính xác một lần KHÔNG thay đổi lại
Tôi không muốn sao chép hoặc cải tổ lại dưới dạng a) mỗi trường hợp T
có thể là đối tượng rất lớn và b) cho các hoạt động khác mà tôi sẽ thực hiện trên các phần tử của vectơ. để giữ nguyên theo thứ tự.
Hơn nữa, tôi thực sự không muốn đi xuống con đường liên tục chọn và từ chối trùng lặp. Có thể tôi sẽ có rất nhiều đối tượng lớn được lưu trữ trong vector và hiệu quả là chìa khóa vì tôi sẽ tìm cách gọi phương thức chọn ngẫu nhiên này nhiều lần trong một giây.
Bạn có thể triển khai phương thức hoán đổi cho loại của mình không? Nếu việc thực thi thư viện chuẩn sử dụng tra cứu phụ thuộc vào đối số để trao đổi (nó nên), thì bạn sẽ nhận được 'O (1)' trao đổi các phần tử trong vectơ. –