草庐IT

set_relation

全部标签

c++ - std::set 没有前后成员函数是否有设计原因?

我知道我可以使用*s.begin(),但是同样的参数可以用于vector,它有front/返回我经常使用set/map的有序属性来获取“最小”元素/键-事实上,我这样做并不是拥有它的原因,只是一个例子:)这里我说的是design为什么front/back会是糟糕的设计的原因,所以请跳过委员会忘记的明显原因它... 最佳答案 我想“前”和“后”这两个词是为sequence容器保留的(即元素的顺序由插入顺序决定的那些),这些词的意思是建议在该序列中的物理位置。由于set不是序列容器(而是关联容器),因此这是不合适的。特别要注意的是,“f

c++ - 修改 std::set 的元素时会发生什么?

如果我更改std::set的一个元素,例如,通过一个迭代器,我知道它不是“重新插入”或“重新排序”,但有没有提到它是否会触发未定义的行为?例如,我想插入会搞砸。有没有具体提到会发生什么? 最佳答案 您不应直接编辑存储在集合中的值。我从具有一定权威性的MSDN文档中复制了这个:TheSTLcontainerclasssetisusedforthestorageandretrievalofdatafromacollectioninwhichthevaluesoftheelementscontainedareuniqueandservea

c++ - 我可以使用复制算法复制 'vector' 中的 'set' 元素吗?

我在以下代码中遇到运行时错误。请让我知道我可以在集合中复制vector元素吗?#include#include#includeusingnamespacestd;intmain(){vectorv;setkk;set::iteratoritr;for(inti=0;i 最佳答案 你没有初始化itr:set::iteratoritr=kk.begin();或完全删除itr:copy(v.begin(),v.end(),inserter(kk,kk.begin()));在这种情况下,你可以简单地初始化kk(但如果你想添加到kk遵循上面的

c++ - `std::set` 在每种情况下都会对元素进行排序吗?

这个问题在这里已经有了答案:Isthestd::setiterationorderalwaysascendingaccordingtotheC++specification?(5个回答)关闭5年前。来自cplusplus.com引用似乎std::set对元素进行排序。我需要对字符串进行排序,但我不确定它是否适用于每个平台和编译器。主要是GCC、MinGW、VC。 最佳答案 根据其定义,std::set是一个排序容器。它是标准的一部分。对其进行排序有助于保持它是一个集合,而不仅仅是一个任意集合。来源:http://www.sgi.co

c++ - Eclipse CDT : How to reference 3rd party includes via a Relative path

我是Eclipse-CDT的新手,第一次建立一个新项目。我正在尝试引用Boost而不硬编码绝对路径。我已将boost放入我的工作区文件夹中,例如/home/user/workspace/boost_1_39_0然后我希望添加一个包含目录,指向相对于工作区的该文件夹,但Eclipse不会这样做,它似乎只想指向/home/user/workspace/[MyProjectNameHere]有什么建议吗?将Boost复制到我的项目文件夹中似乎没有意义,因为它会出现在Eclipse中并且Eclipse想要构建它(当然,我可以排除它)。亚历克斯 最佳答案

c++ - 为什么 std::set.insert() 返回一个非常量迭代器,但我无法修改它?

考虑这个代码示例:#include#includeusingnamespacestd;setstring_set;voidfoo(conststring&a){pair::iterator,bool>insert_result=string_set.insert(a);string&val=*(insert_result.first);val+="-inserted";}所以,撇开正确性不谈,比如不检查是否成功插入等等,这段代码看起来应该允许我在插入后修改字符串,但是编译器(VS2010)禁止将迭代器取消引用到非常量字符串(我们正在从VS2005迁移,它在没有警告的情况下通过了这一点)

c++ - 如何获取 std::set 的第一个元素

我是你们,我在我的软件中发现了一个奇怪的错误。在我从std::set中删除元素的while循环中,我希望始终获取第一个元素,直到容器为空:std::setnodes;//Fillnodesfor(inti=0;i我发现以这种方式实现第一个元素适用于gcc但不适用于MSVC,它在我尝试取消引用(*nodes.begin())迭代器时崩溃。std::set的两个实现是否表现不同?我想要一个没有实现差异的数据结构,可以吗?可能我必须为这种操作更改数据结构 最佳答案 您的代码在VS2010中运行良好,也许您应该更新您的vcc。

c++ - 为什么 SSE set (_mm_set_ps) 会颠倒参数的顺序

我最近注意到_m128m=_mm_set_ps(0,1,2,3);在转换为float组时将4个float倒序排列:(float*)p=(float*)(&m);//p[0]==3//p[1]==2//p[2]==1//p[3]==0union{_m128m;也是如此。float[4]一个;}也是。为什么SSE操作使用这种排序?这没什么大不了的,但有点令人困惑。还有一个后续问题:当通过索引访问数组中的元素时,应该按0..3的顺序还是3..0的顺序访问? 最佳答案 取决于你想要做什么,你可以使用_mm_set_ps或_mm_setr_p

c++ - 如何将 unordered_set 与自定义类型一起使用?

我是否需要为自定义类型创建自己的哈希函数?unordered_set没有我可以使用的默认值吗? 最佳答案 标准库包含std::hash的特化对于基本类型、指针和std::string(或者更确切地说,对于std::basic_string的所有特化)。不幸的是,该库不包含以下重要的new-from-old组合功能,但它是Boost的一部分,您应该将其复制到您的代码中:templateinlinevoidhash_combine(std::size_t&seed,constT&v){std::hashhasher;seed^=hash

c++ - set vs unordered_set 最快迭代

在我的应用程序中,我有以下要求-数据结构将只用一些值(不是键/值对)填充一次。这些值可能会重复,但我希望数据结构只存储一次。我将遍历上面创建的数据结构的所有元素100次。元素在迭代中出现的顺序无关紧要。约束1表明我必须使用set或unordered_set,因为数据不是键值对的形式。现在集合插入比unordered_set插入成本更高,但数据结构仅在我的程序开始时填充一次。我相信决定因素将是我能够以多快的速度迭代数据结构的所有元素。为此,我不确定set或unordered_set是否会更快。我相信标准没有提到这个事实,因为对于任何一种数据结构,这个操作都是O(n)。但我想知道哪个数据结