我将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 是query)FstrictlyLessOrEqual()应返回值 5
您想使用std::map的upper_bound()或lower_bound()方法:
upper_bound()返回一个迭代器,指向比所搜索的键更高的第一个键。所以:
称呼upper_bound()。
如果upper_bound()返回begin(),则意味着搜索的键低于映射中的最低键。
否则递减迭代器。现在,它将指向与搜索到的键相同的键,或者指向下一个较小的键。
lower_bound()返回一个迭代器到映射中等于或大于搜索键的第一个键,因此为了实现您的目标,您需要:
称呼lower_bound()
检查是否lower_bound()没有返回end(),并且迭代器的键与您搜索的键相同。钥匙存在于地图中。
否则,检查是否lower_bound()返回映射的begin()迭代器值。如果是这样,这意味着您搜索的键低于地图中的第一个键,因此存在这样的值。
否则,递减返回的迭代器。您搜索的键在映射中不存在,并且递减的迭代器指向映射中下一个最小的键。
| 归档时间: |
|
| 查看次数: |
4241 次 |
| 最近记录: |