C++ 使键等于(如果映射中存在键)或严格小于映射中给定的输入

C++ 使键等于(如果映射中存在键)或严格小于映射中给定的输入,c++,stl,stdmap,C++,Stl,Stdmap,我将numberOfItemsnumberofkeys作为输入,并将它们放入如下地图中: int numberOfItems; int query; scanf("%d",&numberOfItems); int temp; map<int,int> iimap; for(int i=0;i<numberOfItems;i++) { scanf("%d",&temp); iimap.insert(make_pair(temp,1)); } pri

我将
numberOfItems
numberofkeys作为输入,并将它们放入如下地图中:

int numberOfItems;
int query;
scanf("%d",&numberOfItems);
int temp;
map<int,int> iimap;
for(int i=0;i<numberOfItems;i++)
{
    scanf("%d",&temp);
    iimap.insert(make_pair(temp,1));
}
printf("Enter query: ");
scanf("%d",&query);
int VstrictlyLessOrEqual = FstrictlyLessOrEqual(query);
int numberOfItems;
int查询;
scanf(“%d”和numberOfItems);
内部温度;
地图iimap;

对于(int i=0;i您要使用
std::map
的或方法:

上界()
upper\u-bound()
将迭代器返回到高于搜索的键的第一个键。因此:

  • 调用
    上限()

  • 如果
    upper\u-bound()
    返回
    begin()
    ,则表示搜索的键低于映射中的最低键

  • 否则,减少迭代器。它现在将指向一个等于搜索的键或下一个较小的键的键

  • 下界()
    lower_-bound()
    返回一个迭代器,该迭代器指向映射中的第一个键,该键等于或大于搜索的键,因此要实现目标,您需要:

  • 调用
    下限()

  • 检查
    lower\u bound()
    是否未返回
    end()
    ,迭代器的键是否与您搜索的键相同。该键存在于映射中

  • 否则,请检查
    lower_-bound()
    是否返回了映射的
    begin()
    迭代器值。如果是,则表示您搜索的键低于映射中的第一个键,因此该值存在

  • 否则,递减返回的迭代器。您搜索的键在映射中不存在,递减的迭代器指向映射中下一个最小的键


  • 如果键的默认顺序(
    std::less
    )不是必需的,那么使用
    std::greater
    作为
    key\u compare
    与单个
    lower\u bound()
    调用就可以了

    // std::greater instead of default std::less
    std::map<int, int, std::greater<int>> m = {{3, 0}, {5, 0}, {7, 0}, {9, 0}};
    
    auto it = m.lower_bound(1);
    printf("%d\n", it != m.end() ? it->first : -1); // prints -1
    it = m.lower_bound(3);
    printf("%d\n", it != m.end() ? it->first : -1); // prints 3
    it = m.lower_bound(4);
    printf("%d\n", it != m.end() ? it->first : -1); // also prints 3
    
    //std::greater而不是默认的std::less
    映射m={3,0},{5,0},{7,0},{9,0};
    自动it=m.下限(1);
    printf(“%d\n”,it!=m.end()?it->first:-1);//prints-1
    it=m.下界(3);
    printf(“%d\n”,it!=m.end()?it->first:-1);//打印3
    it=m.下界(4);
    printf(“%d\n”,it!=m.end()?it->first:-1);//还打印3
    
    如果我在地图中搜索一个最大的键,
    上限
    返回什么?它返回
    end()
    。现在,拿出一张纸和一支铅笔,按照我写下的
    上限()
    的逻辑流程图,看看会发生什么。