草庐IT

C++11 unordered_set with std::owner_less-like hashing

我正在使用外部网络库,它返回一些表示打开的套接字的神奇结构,文档说当将它们插入STL容器时,应该使用std::owner_less比较它们。std::map,std::owner_less>sockets;但是我想改用unordered_map。我该怎么做?std::owner_less是一个比较器,它对HashMap毫无用处。挖掘源代码,MagicStructure似乎是std::shared_ptr的类型定义。 最佳答案 不幸的是,您似乎必须使用map,而对于这种情况不能使用unordered_map:http://wg21.c

java - Eclipse 是否有 "vim: set ft=cpp:"或 "-*- c++ -*-"的等价物?

有时文件中的一些代码没有任何扩展名。此类文件将包含以单一语言编写的代码,但每个此类文件可能使用不同的语言(例如C、C++、汇编语言、wiki标记和HTML)编写。同样,当文件名中有共同的扩展名,但不同的文件使用不同的编程语言时,也会出现此问题。我要解决的问题是避免让每个checkout工作区的开发人员都不必弄清楚源文件是什么类型的文件(没有扩展名,或者扩展名不暗示源文件使用的语言)。为此,文件的作者有责任在文件中加入正确的魔法,以便正确打开文件。由于Eclipse能够根据文件中的某些嵌入文本禁用格式化程序,因此我认为也应该可以指定文件类型。OpenWith功能允许单个开发人员更改文件的

c++ - 无法将 std::unorded_set 与自定义 KeyEqual 进行比较

以下程序无法编译。但是如果我不注释掉operator==,它会编译。为什么在我已经提供了FooEqual的情况下仍然需要operator==#include#includestructFoo{};structFooHasher{size_toperator()(constFoo&)const{return1;}};structFooEqual{booloperator()(constFoo&lhs,constFoo&rhs)const{returntrue;}};//booloperator==(constFoo&lhs,constFoo&rhs){//returntrue;//}in

std::lower_bound 和 std::set::lower_bound 之间的 C++ 区别?

最近,在处理C++编程问题时,我遇到了一些有趣的事情。我的算法使用了一个非常大的集合,并且会在其上多次使用std::lower_bound。然而,在提交我的解决方案之后,与我在纸上所做的数学运算相反,以证明我的代码足够快,它最终变得太慢了。代码看起来像这样:usingnamespacestd;sets;intx;//codecodecodeset::iteratorit=lower_bound(s.begin(),s.end(),x);然而,在从friend那里得到使用set::lower_bound的提示后,所讨论的算法比以前运行得更快,而且它符合我的数学计算。改变后的二分查找:se

c++ - 在只有 const shared_ptr 的 unordered_set 中找到一个 shared_ptr?

我有一个unordered_set>us我想知道是否有针k在us,但是k类型为shared_ptr所以unordered_set>::find提示它无法转换。有解决办法吗?也许通过直接提供哈希?我试过const_cast(感觉很脏)但这并没有解决问题。 最佳答案 使用std::const_pointer_cast在这里是一个可能的解决方案。us.find(std::const_pointer_cast(k));因为您没有修改k,所以可以丢弃const。 关于c++-在只有constsha

c++ - STL map 和 set 中的排序顺序

用户定义的对象在map和set中是如何排序的?据我所知,map/set是SortedAssociativeContainers:被插入的元素根据其持有的键进行排序。但是map和set在内部使用operator>对它们的元素进行排序。在SGI站点上,我有以下示例:structltstr{booloperator()(constchar*s1,constchar*s2)const{returnstrcmp(s1,s2)months;months["january"]=31;months["february"]=28;months["march"]=31;months["april"]=30

c++ - 不区分大小写的 STL 容器(例如 std::unordered_set)

制作std::unordered_setCASE-INSENSITIVE容器的最短、最跨平台的方法是什么?my_set.insert("Apples");my_set.insert("apples");//Insertdoesn'toccurbecauseofduplicateitem我知道STL提供了Hash和Pred。Hash应该是什么?Pred应该是什么?如果它们不是内置的,那么请提供它们的代码以及它们的使用示例(即我如何声明std::unordered_set?)。由于批评,我将详细说明我正在尝试做的事情。我需要一个高性能的透明HTTP代理服务器,它所做的其中一件事就是快速查找

c++ - 为什么我不能用谓词的实例化构造 std::set,但我可以分配以这种方式构造的 std::set?

所以我有一个数组(0-n),其中包含我希望std::set用于其排序的值。该数组是unsignedintcost[n]。我正在使用以下仿函数进行排序:structProxySorter{ProxySorter(constunsigned*arr):proxy_array(arr){}booloperator()(constunsigned&a,constunsigned&b)const{returnproxy_array[a]问题来了...当我构建集合时,这是合法的:std::setnode_queue=std::set(ProxySorter(cost));我没有收到任何错误,一切都

c++ - 查找范围 [a, b] 中不在给定 std::set S 中的所有数字

让a和b是整数,a.给定一个std::setS什么是一种有效的和优雅(最好没有显式循环)的方式来查找和存储(到vector中)来自[a,b]的所有数字不在S中.解决方案一:vectorv;for(inti=a;i解决方案2:压入a中的所有数字至b进入set并使用std::set_differenceSolution1包含一个显式循环,而solution2似乎不是很有效(至少在内存方面)。你有什么建议?我正在寻找一种优雅的STL-ish(提升也是可以接受的)惯用方式来做到这一点。 最佳答案 您可以执行与您的解决方案#2类似的操作。但不

c++ - C++ STL set容器的count()方法为什么这样命名?

它真正检查的是contains()而不是出现的次数,对吧?也不允许重复,所以contains()不是比count()更好的名字吗? 最佳答案 这是为了使其与其他容器类保持一致,因为多态性的一个重要方面是能够使用相同的API处理不同的类。它确实实际上返回了计数。一个集合的计数只能为零或一个这一事实不会改变这一方面。它与集合对象根本上并没有什么不同,后者只允许同时具有每个“值”的两个事物。在那种情况下,它会返回零、一或二的计数,但它仍然是一个计数,与集合相同。标准的相关部分是C++1123.2.4,其中讨论了关联容器set、multis