首页 > 解决方案 > lower_bound 函数返回错误的迭代器

问题描述

在下面的代码中,7 和 4 都返回相同的值,即 2,同时每个 else 数字都返回正确的索引

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main(){
    vector<int> v;

    v.push_back(1);
    v.push_back(3);
    v.push_back(7);
    v.push_back(4);
    v.push_back(9);
    cout<<"lower bound : "<<lower_bound(v.begin(),v.end(),7)-v.begin()<<endl;
    cout<<"lower bound : "<<lower_bound(v.begin(),v.end(),4)-v.begin()<<endl;
}

输出:

lower bound : 2
lower bound : 2

我不明白代码有什么问题。

标签: c++algorithmvector

解决方案


vector应该提前排序。例如

std::sort(v.begin(), v.end());
cout<<"lower bound : "<<lower_bound(v.begin(),v.end(),7)-v.begin()<<endl; // ->3
cout<<"lower bound : "<<lower_bound(v.begin(),v.end(),4)-v.begin()<<endl; // ->2

推荐阅读