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()
。现在,拿出一张纸和一支铅笔,按照我写下的上限()
的逻辑流程图,看看会发生什么。