比较两个对象向量的元素

时间:2014-03-26 10:50:48

标签: c++ class vector iterator

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

std::vector<OrderInformation> v_SellOrders;

std::vector<OrderInformation> v_BuyOrders;

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

有一种简单的方法吗?

提前致谢。

2 个答案:

答案 0 :(得分:0)

我认为如果对v_BuyOrders进行排序可能会更好。也许最好的方法是使用std :: set而不是std :: vector。为此你必须定义operator&lt;(const OrderInformation&amp;,const OrderInformation)或任何进行比较的函数,你可以给std :: set的构造函数。 之后,使用std::set::lower_bound

可以轻松完成您想要的操作

答案 1 :(得分:0)

不确定。您正在寻找分区。这里有一些代码(未经测试,我害怕):

#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