我有两个对象向量,每个对象都包含价格信息
std::vector<OrderInformation> v_SellOrders;
std::vector<OrderInformation> v_BuyOrders;
我想将v_SellOrders的一个特定价格值与v_BuyOrders的所有价格值进行比较,看看它是否小于所有价格的最大值。然后将迭代器返回到v_BuyOrders中的第一个值,使其小于。
有一种简单的方法吗?
提前致谢。
答案 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
。