gpt4 book ai didi

c++ - 用于将一个序列的 "dominance"表示为另一个序列的元函数

转载 作者:行者123 更新时间:2023-11-30 03:58:50 25 4
gpt4 key购买 nike

我正在寻找一个单一的元函数(例如 std::less_equal),它可以被使用或组合以表达支配关系,定义如下。

序列 A 支配另一个序列 B(两者具有相同的长度)如果:

  1. A的每个元素均不小于对应的元素B
  2. A中至少有一个元素大于B中对应的元素

到目前为止,我能想出的最好的办法包括两个独立的测试,一个接一个,如下所示。

template<typename T>
bool dominates( T& sequence1 , T& sequence2 )
{
if( std::equal( sequence1.begin() , sequence1.end() , sequence2.begin() ) ) return false;
return std::equal( sequence1.begin() , sequence1.end() , sequence2.begin() , std::less_equal<double>() );
}

是否可以使用单个元函数来做同样的事情?

最佳答案

一次性代码的问题是你必须保持状态——你必须记住你是否遇到了主导元素。

编写一个简单的 for 循环可以在您知道结果为 false 时为您提供短路的优势。但是如果你想要一个单线,给你:

template<typename T>
bool dominates2(const T& sequence1, const T& sequence2) {
return std::inner_product(std::begin(sequence1), std::end(sequence1),
std::begin(sequence2), 0,
// this accumulates the result
[](int prevCmp, int curCmp){ return prevCmp > 0 ? prevCmp : (curCmp > 0 ? curCmp : prevCmp + curCmp); },
// this compares corresponding elements of ranges
[](const auto& a1, const auto& a2){ return (a1 > a2) - (a2 > a1); }) < 0;
}

关于c++ - 用于将一个序列的 "dominance"表示为另一个序列的元函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27238879/

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