草庐IT

set_relation

全部标签

c++ - 总结两个 boost::accumulator_set 实例

我最近发现了优秀的库boost::accumulators,我想用它来代替我的一些累加统计的代码。我在文档中找不到的一件事是对两个累加器集求和的能力,如operator+=例子:usingnamespaceboost::accumulators;typedefaccumulator_set>AccumSet;classFoo{AccumSetacc;public:Foo&operator+=(constFoo&that){this->acc+=that.acc;//error!nosuchoperatorreturn*this;}doubleGetVariance(){returnva

c++ - 我应该为一组指针使用 std::set 或 std::unordered_set 吗?

我有一组指针。在第一步中,我插入数据指针,在第二步中,我遍历整个集合并对元素进行一些处理。顺序并不重要,我只需要避免重复,这对指针比较很有效。我的问题是,出于相同目的使用无序集是否有利。无序集的插入速度更快吗? 最佳答案 正如AmiTavory评论的那样,如果您不需要订单,那么通常最好使用未排序的容器。原因是如果顺序以某种方式提高了性能,无序容器仍然可以自由使用它,因此无论如何都能获得相同或更好的复杂性。无序集合的一个缺点是它们通常需要针对键类型的哈希函数。如果制作一个太难或太贵,那么不使用哈希的容器可能会更好。在C++的标准库中,

c++ - 有没有办法交叉/区分 std::map 和 std::set?

我想知道是否有办法在定义为std::set的两个结构之间进行交叉或区分和std::map使用标准算法(如std::set_intersect)问题是我需要计算map的集合和键集之间的差异,但我想避免重新分配它(因为它是每秒对大型数据结构进行多次的操作)。有没有办法获得std::map的“关键View”??毕竟我正在寻找的是在执行设置操作时只考虑键,所以从实现的角度来看应该是可能的,但我还没有找到任何东西。 最佳答案 您可以使用transform_iterator来自boost以适应std::map迭代器并仅返回键:#include#

c++ - 在 set<pair>> 中查找具有特定第一个坐标的任何元素

我正在尝试解决以下问题。假设我在C++中有以下容器:std::set>my_container;这个集合(字典)是按照顺序排序的在std::pair,这是字典顺序。我的任务是在my_container中找到任何元素其第一个坐标等于x,并将迭代器返回给它。显然,我不想使用find_if,因为我需要在对数时间内解决这个问题。如果有任何关于如何做到这一点的建议,我将不胜感激 最佳答案 您可以使用lower_bound为此:autoit=my_container.lower_bound(std::make_pair(x,std::numer

C++0x 问题:恒定时间插入 std::set

根据thispage,如果我使用,我可以实现恒定时间插入iteratorstd::set::insert(iteratorposition,constvalue_type&x);我提供的position迭代器直接“先于”正确的(按顺序)插入点。现在我关心的情况是,如果我知道我要插入的值在最后(因为它是最大的),例如:setfoo={1,2,3};foo.insert(4);//thisisaninefficientinsert根据上述标准,我应该将最后一个元素foo.end()-1传递给insertnotfoo。结束()。我的理解正确吗?如果我通过foo.end()会发生什么?它是O(

c++ - 为什么对于基于 RB 树的 C++ std::set 的插入时间基准,我得到的是常数而不是对数曲线?

我在HeapvsBinarySearchTree(BST)比较BST和Heap但是当我尝试对两者进行基准测试并比较结果时,我无法解释BST的数据。首先,我确认标准库确实使用了红黑树:WhatistheunderlyingdatastructureofaSTLsetinC++?然后我运行了这个基准测试。主要.cpp#include#include#include#includeintmain(intargc,char**argv){size_ti,n;std::setbst;std::random_devicedev;unsignedintseed=dev();std::mt19937p

c++ - 如何获取 promise::set_exception(x) 的参数?

我在几个地方找到了关于如何使用promise的引用copy_exception,但我在当前的FDIS中找不到它。自从那些博客以来,是否有关于如何使用set_exception()的替代方法?例如herevoidasyncFun(promiseintPromise){intresult;try{//calculatetheresultintPromise.set_value(result);}catch(MyExceptione){intPromise.set_exception(std::copy_exception(e));//我发现std::current_exception()h

c++ - 当所有元素都应该是唯一的时,为什么 STL set 有 count()?

我能理解multiset有count(),用来统计一个值出现的次数,因为multiset中元素可以重复。但是,当所有值都已经唯一时,设置count()有什么意义呢? 最佳答案 count是associativecontainerrequirements的一部分(1)。每个关联容器都需要将其作为其接口(interface)的一部分提供,即使结果始终为零或一(如std::set的情况)。(1)这是描述关联容器概念的SGISTL文档的链接;C++标准中定义的概念可能略有不同,但差别不大。 关于

c++ - 为什么 std::set::lower_bound(x) (有效地)定义为最小数 >= x 而不是最大数 <= x?

也许我误解了lowerbound的技术定义,但我希望如果我有一个集合a={0,3,4}并计算a.lower_bound(2)结果将为0。IE。我希望std::set::lower_bound接近infimum的数学概念然而标准库将其定义为不小于(有效>=)x的最大数。这背后的原因是什么? 最佳答案 “[lower|upper]_bound”函数旨在返回集合中的一个位置,您可以在其中插入一个不会违反集合顺序的键。因为STL集合的迭代器指向下一个元素之前,如果lower_bound(2)将迭代器返回到0,则插入2将违反了你的集合顺序,它

windows - EFS(加密文件系统): security concern: aren't password-related hashes stored on the hard drive

以下youtube视频很好地总结了EFS的工作原理。对于那些对我附上的此类窗口的内容摘要感兴趣的人它在下面。然而,这给我留下了一个关于安全的问题:当用户在Windows中登录时,可能会根据密码计算哈希值(或者从密码加上用户名和其他数据,例如作为盐)。当用户首次创建密码时,此类哈希必须存储在某处如果我没记错的话,在硬盘上。至少,旧的Unix系统曾经在这样的方式(用这样的方式存储在/etc/passwd中)。因此,当用户登录时,计算密码哈希值,并按顺序与存储在此类文件中的内容进行比较对用户进行身份验证。如果哈希值匹配,则用户已登录。到目前为止一切顺利。如果使用上述机制(在现代Windows