对象的分离向量

Separating vector of objects

本文关键字:向量 分离 对象      更新时间:2023-10-16

我正在编写一个函数,该函数将根据其中一个对象的值将对象的向量分成两个向量。 我希望它返回任何向量。

这是我到目前为止的代码

std::vector<AggregatedQuoteType> OrderBook::get_aggregated_order_book(SellBuyType which_side) const
{
    std::vector<AggregatedQuoteType> ret;
    std::vector<AggregatedQuoteType>::const_iterator i = v_OrderInfo.begin();
        for (; i != v_OrderInfo.end(); ++i)
            ((*i).get_SB_type()==BUY ? v_BuyOrders : v_SellOrders).push_back((*i));
    if(which_side==SELL){
        ret = v_SellOrders;
    }
    else{
        ret = v_BuyOrders;
    }
    return ret;
}

编辑

我收到以下错误:

[错误] 调用 'std::vector::p ush_back(const AggregatedQuoteType&) const' 时没有匹配函数

您已将

函数get_aggregated_order_book标记为const

OrderBook::get_aggregated_order_book(SellBuyType which_side) const
                                                             ^^^^^
                                                             Here!

C++中的const关键字意味着您不会对类中的任何成员进行更改,我认为v_BuyOrdersv_SellOrders都是如此。

如果要修改 OrderBook 类的成员,则需要使该方法成为非常量。

您是否需要填充v_BuyOrders和v_SellOrders,或者只是返回which_side的任何匹配项?如果是后者,如何仅应用copy_if操作并返回结果?

std::vector<AggregatedQuoteType> ret;
std::copy_if(v_OrderInfo.cbegin(), v_OrderInfo.cend(), std::back_inserter(ret),
    [=](const AggregatedQuoteType &at) { return at.get_SB_type() == which_side) };
return ret; 

编辑:不使用lambda/C++11,

struct pred {
    SellBuyType type;
    pred(SellBuyType t) : type(t) {}
    bool operator()(const AggregatedQuoteType &at) {
       return at.get_SB_type() != type; // Copies the elements for which this returns false
    }
};
std::remove_copy_if(v_OrderInfo.cbegin(), v_OrderInfo.cend(), std::back_inserter(ret), pred(which_side));

但请注意,remove_if/remove_copy_if 实际上并没有删除任何内容,只是将"删除"元素移动到矢量的背面。如果还想删除元素,请在返回值 remove_copy_if 上使用 vector::erase。