C++, python'un set.pop()
mu? unordered_set
s here belgelerine bakıyordum, ancak bir yol görünmüyor. 1. Bir keyfi öğeye erişin ve/veya 2. Erişim + rasgele bir öğeyi kaldırın (haşhaş).C++ 's sırasız setleri için python's set.pop() ile eşdeğer
cevap
Not vector
için, sonunda değeri döndüren back()
var ve sonunda değeri kaldıran ancak geri döndürmeyen pop_back()
var. Bunun nedenleri ayrı bir sorunun içeriği olabilir.
Yani gerçekten istediğiniz şey, bir öğenin (örneğin, yorumlarda önerildiği şekilde begin()
) elde edilmesi ve daha sonra onu aldıktan sonra kaldırmak için bir yöntemdir (örneğin, diğer yanıtta belirtildiği gibi erase(iterator)
). (: Muhtemelen olmamalı ipucu), bir kaldırabilir Eğer kovalar uygulanması tanımlı iç sipariş konusunda aşırı kaygı duyuyorsanız
auto i = *set.begin();
set.erase(set.begin());
veya
Standartların bu niyetine dair herhangi bir referans mı? –
Eşdeğeri unordered_set.erase olduğunu düşünüyorum. örneğin: C++ standart kütüphane kasıtlı çeşitli muhafaza özellikleri, bir "almak ve kaldırmak" işlevini kapsamamaktadır şekilde dizayn olduğu http://www.cplusplus.com/reference/unordered_set/unordered_set/erase/
İlk eleman pop ya yukarıdaki
#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);
}
gibi bir şeyle rastgele eleman Ancak özellikle verimli değildir ve, çiftleri kaldırarak, bir std::vector
doldurma düzeni randomizing ve sadece pop_back
Elemen ing tarafından daha iyi olabilir 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();
}
}
(platformunuza random_device
bağlı N.B. çok iyi bir tohum olmayabilir).
- 1. C# 's LINQ toplama manipülasyon eşdeğer için ruby
- 2. Pythons ile ÖNCE/SONRASI ARAMA imaplib
- 3. Powershell'de C# 's "anahtar kelimesi" anahtar kelimesine eşdeğer mi?
- 4. POSIX'in Win32's Mutex'ine eşdeğer nedir?
- 5. C# eşdeğer
- 6. Eşdeğer C#
- 7. s, S veya c + <cr>
- 8. C++, .NET'in NotImplementedException ile eşdeğer mi?
- 9. C# daki Pythons aralığı (12) eşdeğeri var mı?
- 10. C# ULONG_PTR Eşdeğer
- 11. C++ 17 operatörü "" s?
- 12. C# Eşdeğer Java IdentityHashMap
- 13. C++ sırasız bir çiftte bir değer depolamak
- 14. C# 7.0 için Microsoft.Net.Compilers eşdeğer var mı?
- 15. uniqueidentifier Eşdeğer DataType C#
- 16. C++ Java'ya eşdeğer bu
- 17. pyspark scala.util.Try ile eşdeğer nedir?
- 18. Basit GUI Araç Setleri Clojure ile Kullanım
- 19. CreateObject C/C++ ile eşdeğer mi? (COM Interop)
- 20. C# C++ 11'de decltype ile eşdeğer mi?
- 21. Ruby ile S/MIME
- 22. C programında% s belirtiminden önce c
- 23. Java için eşdeğer .charCodeAt()
- 24. C# eşdeğer php ilişkisel dizi
- 25. C# .NET PHP zamanına eşdeğer()
- 26. JDIC ile eşdeğer mi?
- 27. Sırasız resimlerin nasıl sıralanacağı
- 28. C# 's Python eşdeğeri .Select?
- 29. C de% s nasıl yazdırılır?
- 30. C# 's uzantısı yöntemleri Scala eşdeğeri? C# '
* Sırasız * olduğundan, başlayarak() ve bitiş() "isteğe göre" değil? Python muhtemelen kapakların altında benzer bir şey yapıyordur. – swstephe
Doğru ... Programımın uygulanmasına bağlı kalırım. – hlin117