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

C++ tuple向量使用lower_bound自定义比较器出现get<0>匹配错误

问题根因

你没有包含<tuple>标准头文件。std::get针对std::tuple的特化重载定义在<tuple>头中,当前你引入的头文件里只有std::pair版本的std::get实现,所以调用时找不到匹配的函数,触发编译报错。

修复方案

  1. 首先在代码头部添加<tuple>头引入:
#include <tuple>
  1. 修正代码中其他的逻辑错误:
  • max_end变量未定义,需要补充定义该变量的取值
  • 输出语句里的low、v变量不存在,应该替换为实际定义的迭代器up和容器pieces,也就是改为(up - pieces.begin())
  • std::lower_bound要求作用于已按比较规则升序排序的序列,当前的pieces容器没有排序,直接调用lower_bound会返回不符合预期的结果,调用前需要先执行排序

修复后可运行的完整代码

#include <iostream>
#include <algorithm>
#include <vector>
#include <tuple> // 补充缺失的头文件

static bool sortbysec(const std::tuple<double, double, double, double> &a,
                      const std::tuple<double, double, double, double> &b)
{
    return (std::get<0>(a) < std::get<0>(b));
}

int main()
{
    std::vector<std::tuple<double, double, double, double>> pieces;
    double max_end = 20.0; // 补充缺失的变量定义,可根据需求修改取值

    pieces.push_back(std::make_tuple(10.0,22.2,30.3,227));
    pieces.push_back(std::make_tuple(12.0,20.2,30.3,228));
    pieces.push_back(std::make_tuple(228,20.2,30.3,228));
    pieces.push_back(std::make_tuple(221,20.2,30.3,228));
    
    // 先按自定义规则排序
    std::sort(pieces.begin(), pieces.end(), sortbysec);
    
    std::vector<std::tuple<double, double, double, double>>::iterator up;
    up = std::lower_bound(pieces.begin(), pieces.end(), std::make_tuple(max_end, -1, -1, -1), sortbysec);

    std::cout << "lower_bound at position " << (up - pieces.begin()) << '\n';
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 07:45:06