C++ có tương đương với số set.pop()
của python không? Tôi đã xem tài liệu cho unordered_set
s here, nhưng dường như không có cách nào để 1. Truy cập phần tử tùy ý và/hoặc 2. Truy cập + xóa phần tử tùy ý (popping).Tương đương với tập hợp python.pop() cho các bộ không có thứ tự của C++
Trả lời
Lưu ý rằng C++ thư viện giữa các ý kiến cố ý thiết kế sao cho các chi tiết kỹ thuật khác nhau chứa không bao gồm một "nhận được và loại bỏ" chức năng: ví dụ: cho vector
, bạn có back()
trả về giá trị ở cuối và bạn có pop_back()
sẽ xóa giá trị ở cuối, nhưng không trả lại giá trị đó.
Lý do cho điều này cũng có thể là nội dung của một câu hỏi riêng biệt. Vì vậy, những gì bạn thực sự muốn là một phương pháp để có được một phần tử (ví dụ: begin()
như được đề xuất trong các ý kiến), và sau đó để loại bỏ nó một khi bạn đã nhận được nó (ví dụ: erase(iterator)
như đã đề cập trong câu trả lời khác).
bất kỳ tham chiếu nào về các lý do của ý định đó theo tiêu chuẩn? –
Tương đương với unordered_set.erase tôi nghĩ vậy. http://www.cplusplus.com/reference/unordered_set/unordered_set/erase/
Bạn có thể bật các yếu tố đầu tiên
auto i = *set.begin();
set.erase(set.begin());
hoặc nếu bạn quá quan tâm về trật tự nội bộ thực hiện xác định của xô (gợi ý: bạn có lẽ không nên có), bạn có thể loại bỏ một yếu tố ngẫu nhiên với một cái gì đó giống như
#include <unordered_set>
#include <iostream>
#include <random>
int main()
{
std::unordered_set<int> set{0, 1, 2, 3, 4, 5};
std::default_random_engine ran{std::random_device{}()};
auto it = set.begin();
std::advance(it, std::uniform_int_distribution<>{0, set.size() - 1}(ran));
std::cout << *it << '\n';
set.erase(it);
}
trên đây không phải là đặc biệt hiệu quả tuy nhiên và bạn có thể được tốt hơn bằng cách điền vào một std::vector
, loại bỏ các bản sao, ngẫu nhiên trình tự, sau đó chỉ cần pop_back
ing các elemen ts.
#include <algorithm>
#include <vector>
#include <iostream>
#include <random>
int main()
{
std::vector<int> vec{0, 1, 2, 3, 3, 4, 5, 5};
std::sort(vec.begin(), vec.end());
vec.erase(std::unique(vec.begin(), vec.end()), vec.end());
std::shuffle(
vec.begin(),
vec.end(),
std::default_random_engine{std::random_device{}()}
);
while (!vec.empty()) {
std::cout << vec.back() << '\n';
vec.pop_back();
}
}
(n.b. tùy theo nền tảng của bạn random_device
có thể không phải là hạt giống rất tốt).
- 1. Có tương đương C++ với BigDecimal của Java không?
- 2. Có tương đương với các chuỗi ký tự nguyên văn của C# trong PHP không?
- 3. Có tương đương với tĩnh của C trong C# không?
- 4. PHP có tương đương với #ifdef của C/C++ không?
- 5. Có tương đương C++ với getcwd không?
- 6. C# có tương đương với mã encodeURIComponent của JavaScript() không?
- 7. C# có tương đương với gói #pragma trong C++ không?
- 8. Có tương đương với Ruby cho Function.prototype.bind của JavaScript không?
- 9. C# tương đương với VB6 của GetObject
- 10. Có tương đương với idifierForVendor của iOS cho Android không?
- 11. Tương đương với các tệp jar của C#?
- 12. C++ có tương đương với NotImplementedException của .NET không?
- 13. Có phương pháp Luồng Java tương đương với bộ sưu tập của Scala "thu thập" không?
- 14. Tương đương với window.setTimeout() cho C++
- 15. Có tương đương C# với CountDownLatch của Java không?
- 16. Có tương đương C# với mảng array_key_exists của PHP không?
- 17. Có scala/java tương đương với bộ sưu tập của Python 3.Có phải
- 18. Bộ sưu tập không có thứ tự cho các đối tượng không thể sửa được?
- 19. Liệu C# có tương đương với modifier tin của Delphi
- 20. C# có tương đương với decltype trong C++ 11 không?
- 21. Tương đương với Java hiệu quả của Bloch cho C#
- 22. Tương đương với Scikit-learning cho C++?
- 23. C# tương đương với charAt của Java()?
- 24. Tương đương với #region cho C++
- 25. Có tương đương chung với ArrayIterator từ Bộ sưu tập Apache Commons không?
- 26. Có tương đương với tăng :: multi_index cho Java someplace không?
- 27. C# tương đương với LinkedHashMap
- 28. Có tương đương C++ của NullPointerException
- 29. Có tương đương forever.js cho PHP để chạy tập lệnh của tôi liên tục không?
- 30. Có tương đương với 'this' trong C# cho các thành viên tĩnh không?
Vì nó là * không theo thứ tự *, không phải là bắt đầu() và kết thúc() "tùy ý" theo định nghĩa? Python có lẽ đang làm một cái gì đó tương tự dưới bìa. – swstephe
True ... Tôi có thể chỉ cần gắn bó với việc thực hiện chương trình của tôi. – hlin117