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

Uts*_*haw 5 c++ stl stdmap

我将numberOfItems键的数量作为输入并将它们放入地图中,如下所示:

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);
Run Code Online (Sandbox Code Playgroud)

我为每个输入设置默认键= 1;因此,不存在的键的值 =0 。

6 100 5 4 3 2 1 50

对于此输入(第一个输入 6 是numberOfItems& 最后一个输入 50 是queryFstrictlyLessOrEqual()应返回值 5

Sam*_*hik 7

您想使用std::mapupper_bound()lower_bound()方法:

upper_bound()

upper_bound()返回一个迭代器,指向比所搜索的键更高的第一个键。所以:

  1. 称呼upper_bound()

  2. 如果upper_bound()返回begin(),则意味着搜索的键低于映射中的最低键。

  3. 否则递减迭代器。现在,它将指向与搜索到的键相同的键,或者指向下一个较小的键。

lower_bound()

lower_bound()返回一个迭代器到映射中等于或大于搜索键的第一个键,因此为了实现您的目标,您需要:

  1. 称呼lower_bound()

  2. 检查是否lower_bound()没有返回end(),并且迭代器的键与您搜索的键相同。钥匙存在于地图中。

  3. 否则,检查是否lower_bound()返回映射的begin()迭代器值。如果是这样,这意味着您搜索的键低于地图中的第一个键,因此存在这样的值。

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