2015-01-05 22 views
-1

我在Visual Studio 2010中使用Visual C++。我有兩個類似但不相同的對象集合(向量)。我爲這兩個擁有所有通用元素的類創建了一個抽象基類。C++創建指向兩個相關矢量集合中對象的指針集合

每個對象在基類中都有一個持有序列號的成員,該成員在整個兩個集合的聯合中是唯一且單調遞增的。我需要用這個內部序列號按順序顯示這些對象給用戶,用「Next」和「Previous」按鈕。

我不能但所有的對象在同一個集合中(用於排序),因爲它們是不同的類,即使相關。我想創建第三個指向基類對象的指針集合,並按顯示順序排序。我在創建這個集合時遇到了麻煩(我嘗試過向量,列表和簡單數組),並使用指向其他兩個集合中的派生類對象的指針來填充它。

我願意接受任何和所有的建議。

戴夫

+0

五月是否你希望我們顯示你實際上的代碼_「有問題」_(在[你的問題]中提供[MCVE](http://stackoverflow.com/help/mcve))(http://stackoverflow.com/文章/ 27784431/EDI t)請)。所以這是獲得任何合理幫助的最低要求。 (順便說一句_trouble_的一個常量來源是使用原始指針,而不是[智能指針](http://en.cppreference.com/w/cpp/memory)來描述這種情況。不幸的是VS2010不支持這個那麼AFAIK,你應該得到一個更新的編譯器。) –

回答

0

所以你的基類應該是這個樣子:

class Base{ 
public: 
    Base() : _sequence(s_sequence++){} 
    bool operator<(const Base& that) const{return _sequence < that.getSequence();} 
    int getSequence() const{return _sequence;} 
private: 
    int _sequence; 
    static int s_sequence; 
}; 

int Base::s_sequence = 0; 

然後你可以把一切都在一個單一的std::vector<Base*> foo,你可以用命令排序:

std::sort(foo.begin(), foo.end(), [](Base* first, Base* second){return *first < *second;});