【发布时间】:2021-03-10 02:20:31
【问题描述】:
我正在尝试了解来自here 的成对映射中的 lower_bound 和 upper_bound。
定义如下:
lower_bound: 在对的映射中,pair(x, y) 的 lower_bound() 将返回一个迭代器,该迭代器指向第一个值大于或等于 x 且第二个值更大的对大于或等于 y。 如果不满足上述条件,则返回一个指向 {map.size(), 0} 对的迭代器。
上界: 在对 upper_bound() 的映射中,对于 pair(x, y) 将返回一个迭代器,该迭代器指向第一个值大于 x 且第二个值大于 y 的对. 如果不满足上述条件,则返回一个指向 {map.size(), 0} 对的迭代器。
现在,让我们考虑下面的例子。
map<pair<int, int>, int> mp;
mp.insert({ { 2, 3 }, 8 });
mp.insert({ { 2, 5 }, 5 });
mp.insert({ { 7, 1 }, 3 });
mp.insert({ { 9, 3 }, 1 });
mp.insert({ { 5, 0 }, 3 });
我们有上面的配对图。
现在,如果我想找到对 {2, 4} 的下限,结果是 {2, 5},根据定义,这对我来说似乎很好。定义说“lower_bound 将返回一个迭代器,该迭代器指向第一个值大于或等于 x 且第二个值大于或等于 y 的对”。所以,在这种情况下,2 等于 2,5 大于 4。
但是,如果我想找到对 {2,2} 的上限,结果是 {2, 3},根据定义。定义说“upper_bound 将返回一个迭代器,该迭代器指向第一个值大于 x 且第二个值大于 y 的对”但在上述情况下,第一个值等于 x。根据定义,{2,2}的上限应该是{9, 3},其中9大于2,3大于2。 p>
我想我在这里遗漏了一些东西。有谁能帮帮我吗?
【问题讨论】:
-
对于极客来说,极客太常见了,文章的质量非常低。
will return an iterator pointing to the pair whose first value is greater than or equals x and second value is greater than or equals to y此说法不正确。 upper_bound 语句同样不正确。作者似乎不明白如何使用配对进行比较(或者他们确实理解但无法清楚地表达自己)。 -
@john,我认为这是真的,但前提是您认为他们所指的
pair是用于映射中键的对。 -
@FantasticMrFox 作者似乎认为 p1