如何在不更改元素指针的情况下对boost :: ptr_vector进行排序

时间:2014-02-24 18:09:01

标签: sorting boost c++11

我有一个在boost :: ptr_vector中存储元素的算法。对于算法而言,一旦分配指向元素的指针在ptr_vector被销毁之前不会改变,这一点很重要。另一方面,我需要对ptr_vector进行排序。我假设(可能天真地),因为常规的std :: sort交换元素,它将简单地交换ptr_vector内部的指针顺序而不使用new和delete。另一方面,我在this post指示中看到排序ptr_vector实际上可能会改变元素指针。有人可以确认重新分配实际发生了吗?有没有办法避免它?

2 个答案:

答案 0 :(得分:1)

我现在认为我的恐惧可能是合理的。似乎the post that prompted my concerns引用了标准库排序,它实际上会导致元素的交换和重新分配。但是ptr_vector有一个sort的成员函数实现,我完全有理由期望它保留元素指针并避免重新分配。

答案 1 :(得分:0)

指针向量作为一个容器显然正在被排序。

如果你想保留所有迭代器和元素引用有效,你应该使用

  • 升压:: stable_vector
  • 或者可能是/与boost multi-index
  • 的某种组合

可悲的是(?)我认为目前没有任何东西可以将这两个概念结合起来。当然可以编写这样的东西,然后Boost Intrusive可以非常有助于管理实现。