C++ std::sort strict weak ordering

前言

参考博客
最近写如下代码后

	std::vector<int> myVector{ 4, 19, 6, 24, 21, 1, 1 };
	std::sort(myVector.begin(), myVector.end(), [](int first, int second) {
		return first >= second;
	});
	for (int i : myVector)
	{
		std::cout << i << std::endl;
	}
	return 0;

程序直接触发一个断言,提示invalid comparator。查找原因最终发现是因为,对于sort的第三个参数要求的函数必须是 strict weak ordering。修改也很简单将

first >= second

修改为

first > second

即可。
具体原因查看参考博客。

其它收获

断言

对于 assert(expression) 常常记不清楚,是expression成立(true)触发断言还是expression不成立(false)触发断言。其实看源码一目了然

    _ACRTIMP void __cdecl _wassert(
        _In_z_ wchar_t const* _Message,
        _In_z_ wchar_t const* _File,
        _In_   unsigned       _Line
        );

    #define assert(expression) (void)(                                                       \
            (!!(expression)) ||                                                              \
            (_wassert(_CRT_WIDE(#expression), _CRT_WIDE(__FILE__), (unsigned)(__LINE__)), 0) \
        )

所以当 expressionfalse 时,会执行 _wassert() 函数,就会触发断言。

C\C++调试常用的宏

#include <iostream>

int main()
{
	std::cout << __FUNCTION__ << std::endl;
	std::cout << __LINE__ << std::endl;
	return 0;
}

__FUNCTION__ 代表此宏所在的函数名称
__LINE__ 代表此宏所在的行数
目前来说这两个宏好像不需要什么特别的头文件支持,可以直接使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值