gpt4 book ai didi

c++ - 如果仅定义了小于比较器,upper_bound()如何工作?

转载 作者:行者123 更新时间:2023-12-03 07:02:00 28 4
gpt4 key购买 nike

我获得了一个在 map 顶部构建的类,具有以下K类型和V类型限制:

  • K:可复制,可分配,小于可比性(<)。不执行任何其他操作(没有相等比较或算术运算符)
  • V:可复制,可分配,相等性可比(==)。不执行任何其他操作。

  • 在这种限制下,这段代码会行不通吗?
    auto it = map.upper_bound(K);
    由于 upper_bound()(定义为 here)返回一个迭代器,该迭代器指向比键大 的第一个元素。意味着K将使用大于比较器?
    还是遵循小于比较器的定义也将定义大于比较器?
    还是我对upper_bound()的工作方式了解不正确?

    最佳答案

    正如@Nate Eldredge所说:

    I believe you would get the first element y such that key < y. That'swhat "greater than" means in this context. Not the first y such that y > key


    并从 C++ documentation of upper_bound():
    template <class ForwardIterator, class T>
    ForwardIterator upper_bound (ForwardIterator first, ForwardIterator last, const T& val)
    {
    ForwardIterator it;
    iterator_traits<ForwardIterator>::difference_type count, step;
    count = std::distance(first,last);
    while (count>0)
    {
    it = first; step=count/2; std::advance (it,step);
    if (!(val<*it)) // or: if (!comp(val,*it)), for version (2)
    { first=++it; count-=step+1; }
    else count=step;
    }
    return first;
    }
    upper_bound()使用 <运算符进行比较,或更具体而言: !(val<*it)

    关于c++ - 如果仅定义了小于比较器,upper_bound()如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64831187/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com