草庐IT

external-sorting

全部标签

c++ - 是否可以将 std::sort 与带有额外参数的排序函数一起使用?

这是我考虑了一段时间的事情。我做了一些研究,在上面找不到任何东西,但我也没有发现任何相反的东西。考虑std::sort在中发挥作用.它需要两个迭代器和一个函数指针作为参数。因此,如果我想按字母顺序对字符串vector进行排序,我会这样做:boolascending(std::stringlhs,std::stringrhs){returnlhs问题在于这种类型的排序函数区分大小写,因此会将以小写字母“a”开头的字符串放在以大写字母“Z”开头的字符串之后。我看到的唯一可见的解决方案是按照boolascending_case_insensitive()创建一个附加功能.但是,如果我能有一个

c++ - C的 "extern"是怎么工作的?

我有一个C/C++程序,它是Firefox的插件。因为它是一个插件,所以它有非主入口点。这些入口点需要在C中编译,否则它们的名称会被破坏。但是,其他函数会过载,因此它们需要是C++。解决方案是外部“C”。我已经想通了。但是,如果我在.c文件周围使用extern“C”,我会收到链接错误,因为C++文件的名称被破坏了,但.c文件中的调用却没有。至少我认为这就是正在发生的事情。解决方案似乎是将extern"C"放在.h文件周围。这似乎意味着在.h文件中声明的函数的名称没有被破坏,即使它们是在(可能被破坏的).c文件中定义的。但是,我不明白为什么这会起作用。这是拼团吗?我是否为以后很难发现的错

c++ - 为什么 std::sort() 比 std::make_heap() 快?

我有13721057我的元素std::vector.我需要对这个vector进行排序并获取前25个元素。我想,因为你可以在O(N)中构建一个堆弹出25个元素(每个元素都是O(logN))一定比在O(NlogN)中对整个vector排序更快.但是,当我对代码计时时:clock_ttStart=clock();sort(mostFrequent.begin(),mostFrequent.end(),greater());printf("Timetaken:%.2fs\n",(double)(clock()-tStart)/CLOCKS_PER_SEC);对比clock_ttStart=cl

c++ - 什么排序方法使用 : quicksort, bucket sort, radix, ... 对于微小的数据对? (c++)

我需要优化一些排序vector>的代码a其中需要根据浮点值对对进行排序。vector的长度在0到5之间。我一直在谷歌上搜索和阅读C++中的排序方法,但找不到任何关于排序小数据集的基准。对于系统来说,尽可能快是很重要的,因为它用于实时Blob跟踪系统。亲切的问候,北河三 最佳答案 Insertionsort和Bubblesort非常适合小数据对。另一种选择是使用一对if语句对比较逻辑进行硬编码。查看Whatisthefastestpossiblewaytosortanarrayof7integers?一些想法。

c++ - GCC 的 std::sort 与 lambda 的不稳定行为

以下代码在使用GCC6.1.0编译时会生成段错误。奇怪的是,错误是一致的,但不会发生在较小的尺寸或略有不同的比较表达式上。你们知道为什么吗?#include#include#includeintmain(){intn=1000;std::vector>vec;for(inti=0;i((7*i)%3,(3*i)%5));}std::sort(vec.begin(),vec.end(),[](std::pairconst&p1,std::pairconst&p2){return(p1.first 最佳答案 尝试改变(p1.second

c++ - 我可以制作函数 `extern "c"` 吗?

我有一些cpp文件,我想使用FFI将它们与LuaJit结合。但问题是,我必须为几乎每个函数添加extern"c"符号,以便FFI可以访问它们。是否有更简单的方法来完成此操作? 最佳答案 多个函数可以放在一个extern"C"block中。这允许您为每个头文件只键入一次extern"C"。extern"C"{voidfunction1();voidfunction2();} 关于c++-我可以制作函数`extern"c"`吗?,我们在StackOverflow上找到一个类似的问题:

c++ - MSVC6 如何处理来自 extern "C"函数的异常?

我正在开发一个用VisualStudio6(我知道,FML)编写的应用程序,它使用LoadLibrary和GetProcAddress调用DLL中的函数。较新的代码无法在VC6中编译,需要较新的编译器。DLL有几个构造C++对象的函数,然后VC6程序通过一个抽象类来使用这个对象。这通常工作得很好,但是当GetProcAddress检索到的函数抛出异常时它会遇到问题——即使异常是在DLL中捕获的。我注意到当抽象类的方法抛出异常时不会发生这种情况。在那种情况下一切正常。我在这里做错了什么?如何让VC6生成代码来正确处理异常?编辑:这是一个导致程序崩溃的函数示例:extern"C"__dec

c++ - 错误 LNK2019 : unresolved external symbol ___iob_func referenced in function "void __cdecl Padding(int)"

使用FTDIAPI可以在VisualStudio2012下正常编译和链接。但在VS2014下,它给出:ErrorLNK2019:unresolvedexternalsymbol___iob_funcreferencedinfunction"void__cdeclPadding(int)"标准库有变化吗? 最佳答案 是的,标准库已经改变,FTDI似乎并不关心-至少从CDM2.12.18驱动程序版本开始不关心。问题在thisquestion的答案中描述。.ftd2xx.lib中devcon.obj的void__cdeclPadding(

c++ - `std::sort` 内部使用了什么魔法让它更快?

这个问题在这里已经有了答案:WhatalgorithmsdopopularC++compilersuseforstd::sortandstd::stable_sort?(2个答案)关闭9年前。我有一个简单的快速排序实现:templatevoidquicksort(IteratorTypebegin,IteratorTypeend){if(begin!=end){constautopivot=*(begin+distance(begin,end)/2);constIteratorTypesep=std::partition(begin,end,[pivot](typenameIterat

c++ - C+ +'s extern-"C"对非 C 语言的功能

众所周知,对C++函数声明extern"C"使其名称具有C链接,使C代码能够链接。我的问题是-是否有其他编程语言我们可以使C++函数名称链接到某些语言,例如extern"Lisp"或extern"FORTRAN"?如果不是,为什么?"C"背后的内部结构是什么造成了限制?有哪些替代方案? 最佳答案 C++标准7.5.2dcl.link说:LinkagebetweenC++andnon-C++codefragmentscanbeachievedusingalinkage-specification:linkage-specificati