Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting 如何在不更改元素指针的情况下对boost::ptr_向量进行排序_Sorting_Boost_C++11 - Fatal编程技术网

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

Sorting 如何在不更改元素指针的情况下对boost::ptr_向量进行排序,sorting,boost,c++11,Sorting,Boost,C++11,我有一个将元素存储在boost::ptr_向量中的算法。对于算法来说,重要的是,一旦分配给元素的指针在ptr_向量被销毁之前不会改变。另一方面,我需要对ptr_向量进行排序。我假设(可能很天真)由于常规std::sort交换元素,它只需交换ptr_向量中指针的顺序,而无需new和delete。另一方面,我在指示中看到排序ptr_向量实际上可能会改变元素指针。有人能证实确实发生了重新分配吗?有没有办法避免它?pointervector作为一个容器,显然正在进行排序 如果希望保留所有迭代器和元素引用

我有一个将元素存储在boost::ptr_向量中的算法。对于算法来说,重要的是,一旦分配给元素的指针在ptr_向量被销毁之前不会改变。另一方面,我需要对ptr_向量进行排序。我假设(可能很天真)由于常规std::sort交换元素,它只需交换ptr_向量中指针的顺序,而无需new和delete。另一方面,我在指示中看到排序ptr_向量实际上可能会改变元素指针。有人能证实确实发生了重新分配吗?有没有办法避免它?

pointervector作为一个容器,显然正在进行排序

如果希望保留所有迭代器和元素引用的有效性,那么应该使用

  • boost::稳定向量
  • 或者可能是与boost多索引的某种组合

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

我现在认为我的担心可能是不合理的。这似乎是指标准的库排序,它确实会导致元素的交换和重新分配。但是ptr_向量有一个sort的成员函数实现,我完全有理由期望它保留元素指针并避免重新分配