2024-10-01 13:40:45 发布
网友
C++是否有一个与Python的^ {CD1>}等价的?我一直在看unordered_setshere的文档,但似乎没有一种方法可以实现1。访问任意元素,和/或2。访问+移除任意元素(弹出)。在
unordered_set
注意到C++标准库是故意EME>设计的,使得不同的容器规范不包括“get and Delphi”函数:例如对于{{CD1>},您有在结尾返回值的^ {< CD2>},并且您有^ {CD3>},它在末尾移除值,但不返回它。在
原因很可能是另一个问题的内容。在
所以你真正想要的是一个方法来获得一个元素(如注释中所建议的begin()),然后在得到它之后将其删除(如另一个答案中提到的erase(iterator))。在
begin()
erase(iterator)
你可以打开第一个元素
auto i = *set.begin(); set.erase(set.begin());
或者,如果您过于关注bucket的实现定义的内部顺序(提示:您可能不应该这样),您可以删除一个随机元素,其中包含
然而,上面的方法并不是特别有效,最好是填充一个std::vector,删除重复项,将顺序随机化,然后只pop_back元素。在
std::vector
pop_back
#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(); } }
(注意:取决于您的平台random_device可能不是一个很好的种子)。在
random_device
等价物是无序的_设置.删除我想。 http://www.cplusplus.com/reference/unordered_set/unordered_set/erase/
注意到C++标准库是故意EME>设计的,使得不同的容器规范不包括“get and Delphi”函数:例如对于{{CD1>},您有在结尾返回值的^ {< CD2>},并且您有^ {CD3>},它在末尾移除值,但不返回它。在
原因很可能是另一个问题的内容。在
所以你真正想要的是一个方法来获得一个元素(如注释中所建议的
begin()
),然后在得到它之后将其删除(如另一个答案中提到的erase(iterator)
)。在你可以打开第一个元素
或者,如果您过于关注bucket的实现定义的内部顺序(提示:您可能不应该这样),您可以删除一个随机元素,其中包含
^{pr2}$然而,上面的方法并不是特别有效,最好是填充一个
std::vector
,删除重复项,将顺序随机化,然后只pop_back
元素。在(注意:取决于您的平台
random_device
可能不是一个很好的种子)。在等价物是无序的_设置.删除我想。 http://www.cplusplus.com/reference/unordered_set/unordered_set/erase/
相关问题 更多 >
编程相关推荐