类中的静态变量和虚函数实现sort()的谓词

时间:2014-07-31 16:49:46

标签: c++ sorting object static

使用静态变量和虚函数在sort()函数中实现谓词,以进行多态类对象排序。这个解决方案有效吗?

以下示例:

// Here we've got virtual function that return a static variable
// and each derived class has a separate unique static

class Base {
    protected:
        virtual const int &GET_ID const { return BASE_ID; }
    private:
        static const int BASE_ID = 0;
}

class Derived : public Base {
    private:
        const int &GET_ID const { return DERIVED_ID; }
        static const int DERIVED_ID = 1;
}

class Derived2 : public Base {
    private:
        const int &GET_ID const { return DERIVED2_ID; }
        static const int DERIVED2_ID = 2;
}


// We can then construct a predicate for the sort function to
// sort a list of polymorphic object

bool compare (Base *base1, Base *base2) {
    return base1->GET_ID() < base2->GET_ID();
} 

std::sort(containerOfBasePtr.begin(), containerOfBasePtr.end(), compare);

我知道可以通过使用非静态保护成员来完成它,但它需要为每个对象分配更多的内存。

1 个答案:

答案 0 :(得分:0)

“高效”是一个相对术语。但是如果你不希望有额外的内存使用,那么使用虚函数或type_index是我能想到的唯一选择。

另一方面,如果我们对问题背景有更多了解,也许可以用完全不同的方式解决这个问题。一种可能的替代方法是将不同的对象存储在完全不同的容器中,由unordered_map索引。