排序对象和多态

rit*_*mbo 1 c++ sorting polymorphism

假设我有一个A类.

而B和C是A的孩子.

A类有一个用于排序A类数组的通用算法,因此我可以将它用于B和C,而无需再为每个数组再写算法.

在算法中,有时我必须交换.问题是我只能看到对象是A类,如果我这样做:

A aux = array[i]
array[i] = array[j]
array[j] = aux
Run Code Online (Sandbox Code Playgroud)

我想我有问题.因为array [i],也许它是B类,而aux是A类,所以我觉得我失去了信息.

我相信你明白这种情况......我如何使用父方法算法对一般的对象数组进行排序?

编辑:初始数组是静态的.

编辑2:所以它不可能有:A :: sort(一个数组[]); 并做我想要的?,不能交换.

唯一的方法是有一系列的参考?A*array []?

Ale*_*ler 8

多态对象由指针或引用(或指针包装器)引用.交换指针就足够了.实际上,您应该能够使用std::sortstd::stable_sort使用合适的谓词:

// 'A' defines 'float getSortKey()'

bool mypred(B* first, B* second) {
   return first->getSortKey() < second->getSortKey();
}

std::vector<B*> them;
std::sort(them.begin,them.end(),mypred);
Run Code Online (Sandbox Code Playgroud)

该策略避免了对象切片.