C++映射中,找到第一个小于键的元素
C++ map, find the first element that is less than key
我目前正在寻找一种类似于C++中的map的数据结构。
我正在寻找一个可以返回第一个元素的函数,该元素立即小于某个数字。 例如:
map<int,int> m;
m[1] ++;
m[2] ++;
m[4] ++;
m[5] ++;
find_first_element_less_than(3) ----> return 2;
m.upper_bound(3) ---> return 4;
我已经查看了lower_bound
函数。但是,它说它返回的第一个元素不小于键。在本例中,lower_bound(3) 返回 4。这不是我想要的。
我想知道C++是否有任何数据结构可以为我做到这一点?
UpdatE:
我可以做auto it = m.lower_bound(3); if (it != m.begin()) it--;
吗?
我认为您可以通过反转地图的顺序(map<int,int, std::greater<int> > m;
),然后使用upper_bound
找到第一个项目"更大"(但实际上更少,因为你颠倒了谓词)比请求的项目"更大"(但实际上更少,因为你颠倒了谓词)。如果你需要按升序迭代,你将不得不使用反向迭代器,这可能会让维护者(包括你自己)有点困惑。仔细考虑您对这种可能的解决方案的需求。
您可以找到下限,如果迭代器不指向映射的开头,则将迭代器递减 1。
lower_bound返回一个迭代器,指向第一个不小于(即大于或等于)键的元素。 因此,最好使用upper_bound并始终减少迭代器:
int find_first_element_less_than(int val)
{
auto uppper_node = m.upper_bound(val);
if (uppper_node != m.begin())
uppper_node--;
return upuppper_node->second;
}
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 使用strcpy将char数组的元素复制到另一个数组
- 如何在随机数列表中查找大于或小于的元素
- std::p artition 的问题,用于分离小于枢轴的元素
- 每个元素小于某个特定数字的子数组的总和
- 为什么 unordered_map::equal_range upper_bound 如果键小于第一个映射元素,则返回
- 在 2D 向量中从每一行添加最大元素,以使行元素 $A_i$ 小于 $A_(i+1)$
- C++映射中,找到第一个小于键的元素
- 如何使用二进制索引树来计算小于索引值的元素数量
- C++-返回向量中最大元素的最有效方法小于给定的输入
- 编写一个函数,返回一个堆栈,该堆栈包含所有小于给定数字的元素,并且顺序相同
- 有没有一种方法可以为std::map中小于给定键的第一个元素找到反向迭代器
- 如何在小于O(n)的时间内选择std::集合中的一个随机元素
- 递归算法对数组中值小于x的每个元素求和
- 在未排序的整数数组中找到最小元素的速度小于0 (n)
- 创建一个函数,检查一个数组是否有两个相反的元素,复杂度小于n^2.(c++)
- 数组中所有元素的和小于0 (n)
- c++ set——键值小于x的元素个数
- c++ set:计算小于某个值的元素