2016-04-10 149 views
2

我有這個簡單的類:LOWER_BOUND矢量<MyClass*>

class MyClass { 
public: 
    int id; 
    string name; 

}; 

我希望有指針由引用MyClassid分類這個類的對象的向量。我認爲使用lower_bound會很容易,我之前用對象的矢量(而不是指針)做了它。用目的,我重載operator<那樣:

bool operator<(MyClass left, int right) { 
    return (left.id < right); 
} 

然後我用lower_bound插入新MyClass對象排序矢量。

vector<MyClass>::iterator low; 
low = lower_bound(vectorname.begin(),vectorname.end(),id); 
prP = idContainer.begin(); 
prP = idContainer.insert(low, newobject); 

我迷路了,如何做與MyClass指針相同的向量。任何人都可以幫我實現嗎?

回答

2

還有的std::lower_bound兩個重載:

template< class ForwardIt, class T > 
ForwardIt lower_bound(ForwardIt first, ForwardIt last, const T& value); 

template< class ForwardIt, class T, class Compare > 
ForwardIt lower_bound(ForwardIt first, ForwardIt last, const T& value, Compare comp); 

第一個是您用於vector<MyClass>的一個,它默認使用operator<。第二個允許自定義比較函數,它將容器中的元素作爲第一個參數,將值作爲第二個參數。這就是你要使用你的vector<MyClass*>什麼:

std::vector<MyClass*> pvec; 
auto low = std::lower_bound(pvec.begin(), pvec.end(), id, 
    [](const MyClass* c, const MyClass& id) { 
     return *c < id; 
    }); 

這是一個有點奇怪的是,比較需要不同類型的兩個參數,但是這只是它是如何。

注意:您當前的operator<採用其參數的值爲。這會招致不必要的副本。您需要將其更改爲參考const

+0

非常感謝Barry,這對我很有用。 – 703

+0

+1表示比較函數不需要兩個參數具有相同的類型。 –