2014-03-29 47 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