![]() |
1
2
|
![]() |
2
1
您还可以使用如下三元运算符来减少一些代码冗余:
看见
|
![]() |
3
1
如果不是,我会用
|
![]() |
4
0
如果可以,修改优先级方案似乎是最优雅的,这样您就可以正常排序了。例如,不是将默认优先级存储为0,而是将其存储为999,并将用户定义的优先级限制为998。这样您就不必再处理这种特殊情况了,您的比较函数可以有一个更简单的结构,没有if的嵌套:
|
![]() |
5
0
我认为您对解决方案的不雅感来自于零优先级异常的重复代码。 The Pragmatic Programmer 说明源中的每一条信息都应该在“一个真实”的位置定义。对于阅读函数的天真程序员来说,您希望异常在一个地方突出,与其他逻辑分离,以便易于理解。这个怎么样?
|
![]() |
6
0
基本上,只需将零行为的特殊处理提取到它自己的函数中,并按排序优先级顺序沿字段迭代,一旦有非零行为,就返回。 |
![]() |
7
0
只要最高优先级不大于INT_MAX/2,您就可以这样做
针对您的评论,这里有一个完整的解决方案,可以避免95%的情况下的翻译,即优先级相等。但是,请注意,您对这一点的担心是错误的,因为就这种情况的总体复杂性而言,这种微小的开销可以忽略不计,因为同等优先级情况至少涉及对时间比较方法的函数调用,最坏的情况是对名称比较器的额外调用,这肯定至少比你做的比较优先级要慢一个数量级。如果你真的关心效率,那就去试验吧。我预测在这篇文章中提出的最差和最好的建议之间的差异不会超过2%。
或
或(假设2的补码)
最后评论:
你真的想要吗
|
![]() |
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
![]() |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
![]() |
rainer · 后台插入程序的初始化 1 年前 |
![]() |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
|
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
|
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |