命名lower_bound,upper_bound c++

发布于 2025-01-24 00:10:08 字数 510 浏览 0 评论 0 原文

有人知道他们为什么给这些名字的地方吗?从数学后绑架开始,他们总是把我的思想留在了纠结中,因为它们都是数学下限,即有限世界中的最低限度。同样,STL中给出的自然语言定义是不良的心理模型IMO。

有人使用心理同义词能够与他们合作,还是只记得幼稚的实现?

lower_bound(rng, x) = get_iter_to(mathematical_lower_bound(rng | filter([](auto y)
                                  {return x<=y;}))
upper_bound(rng, x) = get_iter_to(mathematical_lower_bound(rng | filter([](auto y)
                                  {return x<y;})))

“”

Does any one know why they where given these names? Comming from a maths backgound they always left my mind in tangles since they are both mathematical lower bounds i.e. minimums in the finite world. Also the natural language definition given in the stl is a bad mental model imo.

Does anyone use mental synonyms to be able to work with them, or do they just remember the naïve implementations?

lower_bound(rng, x) = get_iter_to(mathematical_lower_bound(rng | filter([](auto y)
                                  {return x<=y;}))
upper_bound(rng, x) = get_iter_to(mathematical_lower_bound(rng | filter([](auto y)
                                  {return x<y;})))

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

陪你到最终 2025-01-31 00:10:08

伊戈尔·坦德尼克(Igor Tandetnik)在评论中回答了这一点。

所讨论的集合是在保留订单时可以插入给定值的元素。

例如,如果我们想将 2 插入范围 [0,1,2,2,3,4] ,那么我们可以在索引2、3或4。 lower_bound 将迭代器授予范围的开始。 upper_bound 在此范围内给出了最后一个元素。

我想这是库实施者编写枢轴的名称,而不是我试图查找数字向量的键/索引。

Igor Tandetnik answered this in the comments.

The set in question is the the elements which the given value can be inserted before while preserving the order.

For example if we want to insert 2 in to the range [0,1,2,2,3,4] then we could insert it at index 2, 3 or 4. lower_bound gives the iterator to the start of the range. upper_bound gives the last element in this range.

I suppose this is a name for library implementers writing pivots, rather than me trying to look up keys/indices of a vector of numerics.

我不吻晚风 2025-01-31 00:10:08

此示例来自 std :: Ranges :: Lower_bound )更有帮助

std::vector data = { 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5 };
 
    auto lower = ranges::lower_bound(data, 4);
    auto upper = ranges::upper_bound(data, 4);
 
    ranges::copy(lower, upper, std::ostream_iterator<int>(std::cout, " "));
 
    std::cout << '\n'; // 4 4 4 4

This example from std::ranges::lower_bound (link) is more helpful

std::vector data = { 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5 };
 
    auto lower = ranges::lower_bound(data, 4);
    auto upper = ranges::upper_bound(data, 4);
 
    ranges::copy(lower, upper, std::ostream_iterator<int>(std::cout, " "));
 
    std::cout << '\n'; // 4 4 4 4
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文