gpt4 book ai didi

c++ - 范围的 std::lexicographical_compare_three_way

转载 作者:行者123 更新时间:2023-12-04 14:07:38 26 4
gpt4 key购买 nike

为什么会有std::lexicographical_compare_three_way ,但没有 std::ranges::lexicographical_compare_three_way ?
std::ranges::lexicographical_compare 中有参数 Comp ,但它相当无用,因为函数返回 bool ,当需要比较类别类型之一时。
以下是 cppref 的一些链接
https://en.cppreference.com/w/cpp/algorithm/lexicographical_compare_three_way
https://en.cppreference.com/w/cpp/algorithm/ranges/lexicographical_compare

最佳答案

Why is there std::lexicographical_compare_three_way, but no std::ranges::lexicographical_compare_three_way?

std::ranges 中的算法受 concept 约束s 而 std 中的算法不是。因此,例如, std::ranges::lexicographical_compare (使用双向比较,默认为 < )指定为:
template<input_­range R1, input_­range R2, class Proj1 = identity,
class Proj2 = identity,
indirect_­strict_­weak_­order<projected<iterator_t<R1>, Proj1>,
projected<iterator_t<R2>, Proj2>> Comp = ranges::less>
constexpr bool
lexicographical_compare(R1&& r1, R2&& r2, Comp comp = {},
Proj1 proj1 = {}, Proj2 proj2 = {});
值得注意的是,我们有一个概念 indirect_strict_weak_order 解释您需要的比较操作的句法和语义要求,以使该算法有意义。
然而,没有人(还)完成制定相应的 concept 的工作。 s 进行三向比较。请注意 strict_weak_order 具有非常强的语义要求,我们需要假设 strict_weak_order_three_way 的等效项。 (或其他一些不那么吸引人的名字)。
这里有趣的是,我们不需要拒绝 partial_ordering ,而是只要求域中没有两个元素比较为 partial_ordering::unordered .
一旦我们有了这样的 concept s,然后指定和实现 std::ranges::lexicographical_compare_three_way很简单。

关于c++ - 范围的 std::lexicographical_compare_three_way,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67237567/

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