2014-03-29 49 views
1

我有一个包含交易信息的对象向量。我想写一个函数,它将返回“买”交易的向量或“卖”交易的向量?划分对象的向量

如何将物体的矢量分成两个矢量?

编辑 我想要做的东西沿着这些路线:

std::vector<AggregatedQuoteType> OrderBook::get_aggregated_order_book(SellBuyType which_side) const 
{ 
    std::vector<AggregatedQuoteType> ret; 

    std::vector<AggregatedQuoteType>::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; 
} 
+0

如果这是矢量然后使用字段定义这个对象作为其中的一个,只是把它添加到另一个向量。最后返回新创建的矢量。 – Ardel

回答

4

你可以使用std::partition_copy()

std::vector<Trade> buy, sell; 
std::partition_copy(trades.begin(), trades.end(), 
        std::back_inserter(buy), std::back_inserter(sell), 
        [](Trade const& trade){ return trade.is_buy_side(); }); 
+0

非常感谢,但我的编译器不支持C++ 11 –

+0

那么,你可以简单地用适当的谓词替换lambda表达式!毕竟,lambda函数只是一个方便的方法,用函数调用操作符编写相应的类。 ...和其他一切都是C++ 03的一部分。根据谓词的工作方式,你也可以使用'std :: mem_fun_ref()'。 –

1

您可以通过每个元素迭代和的push_back基于另外两个载体之一在一个条件。这里的(许多)的一种方法:

vector<Trade> vec; 
vector<Trade> buy; 
vector<Trade> sell; 

for (const Trade& t : vec) 
    (some_condition ? buy : sell).push_back(t); 
+0

你的意思是什么? –

+0

@ RuthO'Brien这是一个错字。固定。 – jrok