【问题标题】:Comparing elements of two vectors of objects比较两个对象向量的元素
【发布时间】:2014-03-26 10:50:47
【问题描述】:

我有两个对象向量,每个向量都包含价格信息

std::vector<OrderInformation> v_SellOrders;

std::vector<OrderInformation> v_BuyOrders;

我想将 v_SellOrders 的一个特定价格值与 v_BuyOrders 的所有价格值进行比较,看看它是否小于所有价格的最大值。然后将迭代器返回到 v_BuyOrders 中小于它的第一个值。

有简单的方法吗?

提前致谢。

【问题讨论】:

    标签: c++ class vector iterator


    【解决方案1】:

    我认为如果对 v_BuyOrders 进行排序会更好。也许最好的方法是使用 std::set 而不是 std::vector。为此,您必须定义 operatorstd::set::lower_bound做你想做的事情就很容易了

    【讨论】:

    【解决方案2】:

    当然。您正在寻找一个分区。这是一些代码(恐怕未经测试):

    #include <algorithm>
    
    struct PriceIsMoreThan
    {
      const OrderInformation &valueToCheck;
    
      PriceIsMoreThan(const OrderInformation& value) : valueToCheck(value) {}
      bool operator()(const OrderInformation& other)
      {
        return other.price > valueToCheck.price;
      }
    };
    
    OrderInformation& valueToCheck = v_SellOrders[index];
    auto firstBiggerIterator = std::partition(v_BuyOrders.begin(), v_BuyOrders.end(), PriceIsMoreThan(valueToCheck));
    
    if (firstBiggerIterator == v_BuyOrders.end())
    {
      // Price is greater than all in v_BuyOrders
    }
    else
    {
      // firstBiggerIterator points to first element in v_BuyOrders that is bigger than your search price.
    }
    

    请注意,这将重新订购 v_BuyOrders。请参阅documentation on partition

    【讨论】:

    • 非常感谢...我可能应该提到它们是对象的向量!
    • @RuthO'Brien:没关系。您会看到我的代码中的谓词 - PriceIsMoreThan - 比较了两个对象的 price 成员。根据您的具体情况进行调整。
    猜你喜欢
    • 1970-01-01
    • 2018-04-19
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-06
    • 2010-11-26
    • 1970-01-01
    相关资源
    最近更新 更多