You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++使用大括号替代make_pair调用lower_bound时报错如何解决?

报错根因

这个问题是C++模板参数推导的规则限制导致的,和pair本身的大括号构造能力无关。

标准库中lower_bound的核心签名如下:

template< class ForwardIt, class T >
ForwardIt lower_bound( ForwardIt first, ForwardIt last, const T& value );

第三个参数value的类型T属于需要编译器从实参推导的模板参数,推导规则明确限制:花括号初始化列表({...}语法)不能用于通用模板参数的自动推导,除非模板参数显式声明为std::initializer_list类型。

  • 使用make_pair(2,3)时:make_pair会返回明确的std::pair<int, int>类型对象,编译器可以直接推导出T = std::pair<int, int>,匹配函数签名,编译正常。
  • 使用{2,3}时:{2,3}本身没有确定的类型,编译器无法推导T的具体值,找不到匹配的lower_bound重载,因此抛出参数列表不匹配的报错。
替代写法

如果希望保留大括号初始化的写法,只需要给编译器补充明确的类型提示即可,两种常用方案:

  1. 显式声明第三个参数的类型
auto ptr = std::lower_bound(a.begin(), a.end(), std::pair<int, int>{2, 3});
  1. 手动指定lower_bound的模板参数,跳过自动推导
auto ptr = std::lower_bound<decltype(a.begin()), std::pair<int, int>>(a.begin(), a.end(), {2,3});

内容的提问来源于stack exchange,提问作者user13172816

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 21:39:03