草庐IT

set_charset

全部标签

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)。但我想知道哪个数据结

c++ - std::set 迭代器自动 const

这个问题在这里已经有了答案:关闭10年前.PossibleDuplicate:C++STLsetupdateistedious:Ican'tchangeanelementinplace为了简单起见,我已经提取了问题并更改了名称。基本上我实例化一个类并将其存储在std::set中,稍后我想引用该类,以便我可以检查它的值并修改它们...简化代码:MyClasstmpClass;std::setsetMyClass;setMyClass.insert(tmpClass);std::set::iteratoriter;iter=setMyClass.begin();MyClass&tmpCla

c++ - std::set 有重复条目

我有一组3个整数的元组,我不想要任何重复项。也就是说,我不希望2个条目具有相同的3个值。这是我的代码。structKey{unsigneda;unsignedb;unsignedc;public:Key(unsigned_a,unsigned_b,unsigned_c):a(_a),b(_b),c(_c){}booloperatormyset;但我在myset中看到重复项有时。我无法准确掌握导致添加重复条目的顺序。它并不总是发生。我的问题是,我的operator有什么本质上的问题吗?功能? 最佳答案 几乎是对的!但是你级联的太快了。

c++ - C++ 标准的哪一部分要求 set::erase 立即调用析构函数

C++11标准的哪一部分(here'sacopyofadraftstandard)需要关联容器,如std::set、std::map、std::unordered_set和std::unordered_map来立即调用已删除对象的析构函数来自他们?换一种说法-是否允许符合标准的关联容器延迟(而不是忽略!)对它们存储的键和值的键和/或值析构函数的调用?如果不是,标准中的哪个部分禁止这样做?我问是因为我对关联容器中的延迟删除(有时称为弱删除)感兴趣。这是一种从结构中“删除”键(或键/值对)的方法,其中实际数据保留在原位,但包含它的节点被标记为死。这些有时被称为墓碑。它们被用于许多关于数据结

c++ - 如何在少于 O(n) 的时间内在 std::set 中选择一个随机元素?

Thisquestion加上一个约束。我愿意允许不统一的选择,只要不偏向一边。鉴于“setsaretypicallyimplementedasbinarysearchtrees”并且我希望它们包含某种深度或大小信息以进行平衡,我希望您可以对树进行某种加权随机游走。但是我不知道有任何远程便携的方式来做到这一点。编辑:约束不适用于摊销时间。 最佳答案 引入大小等于集合的数组。使数组元素保存集合中每个元素的地址。生成以数组/集合大小为界的随机整数R,在R索引的数组元素中选取地址并取消引用以获得集合的元素。

c++ - MSVC++ 中的源字符集编码规范,如 gcc "-finput-charset=CharSet"

我想创建一些处理编码的示例程序,特别是我想使用宽字符串,例如:wstringa=L"grüßen";wstringb=L"שלוםעולם!";wstringc=L"中文";因为这些是示例程序。这对于将源代码视为UTF-8编码文本的gcc来说绝对是微不足道的。但是,直接编译在MSVC下不起作用。我知道我可以使用转义序列对它们进行编码,但我更愿意将它们保留为可读文本。是否有任何选项可以指定为“cl”的命令行开关,以便做这个工作?有没有像gcc'c-finput-charset这样的命令行开关?如果不是,您建议如何使文本对用户自然?注意:将BOM添加到UTF-8文件不是一种选择,因为它变得