- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我找到了 Timsort 的 Swenson C 实现: https://github.com/swenson/sort在一个较旧的 SO 问题中提到过。
我遇到两个问题:
1)要使用它,我需要定义适合我要排序的类型的 SORT_CMP 宏。我的类型定义为(此处稍作简化):
typedef struct{
int a;
int b;
} MyType
我尝试定义:
#define SORT_TYPE MyType
#define SORT_CMP(x,y) (x.a - y.a)
但我不断收到错误:“请求非结构或 union 中的成员‘a’”我认为 x 和 y 可能是指针,但是:
#define SORT_CMP(x,y) (x->a - y->a)
也不起作用。你能帮我吗?我是 C 新手,可能缺少一些基本的东西。
2)有什么方法可以在 Visual Studio 中编译该代码吗?它使用较新的 C 标准中的内容(例如 block 中间的声明),并且 cl.exe 不接受它。我使用 GCC (mingw) 编译它,但 mingw 的其余代码比 VC 慢 20%(使用 O2 或 O3 标志 vs lc.exe 使用/Ox),所以我可以从使用 Timsort 而不是 stdlib qsort 中获得任何 yield 无法弥补这一点。 Pelles 编译器也是如此。我的大部分数据都有很多部分排序的序列,排序大约需要 50% 的执行时间,所以我觉得假设我让它在 VC 中工作,这里会有收获。
最佳答案
您可以尝试在宏参数周围添加括号,如下所示:
#define SORT_CMP(x,y) ((x).a - (y).a)
该宏很可能与指向 SORT_TYPE 变量的取消引用指针一起使用:
SORT_TYPE * pMyTypeVar1, pMyTypeVar2;
...
SORT_CMP(*pMyTypeVar, *pMyTypeVar2);
如果宏参数周围的括号丢失,预处理器会生成如下内容:
(*pMyTypeVar1.a - *pMyTypeVar2.a)
由于点运算符比星运算符绑定(bind)得更紧,编译器会尝试为指针 pMyTypeVar1
和 pMyTypeVar2
查找成员 a
> 这是行不通的。
按照建议使用括号会导致:
((*pMyTypeVar1).a - (*pMyTypeVar2).a)
这样,编译器首先取消引用 pMyTypeVar1
和 pMyTypeVar2
,最后能够找到成员 a
。
关于c - 对结构进行排序时 Swenson 的 Timsort 实现存在问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11001823/
我找到了 Timsort 的 Swenson C 实现: https://github.com/swenson/sort在一个较旧的 SO 问题中提到过。 我遇到两个问题: 1)要使用它,我需要定义适
我是一名优秀的程序员,十分优秀!