dsi*_*cha 5 c++ sorting algorithm stl
假设我有一个vector<int>
intVec
和一个vector<vector<double> >
matrix
.我想在C++中intVec
对matrix
相应的第一个维度进行排序和重新排序.我之前已经多次问过这个问题,但是这个案子有一个转折点.一个vector<double>
是复制昂贵,因此如复制都intVec
和matrix
一个vector<pair<int, vector<double> >
,分选和复制他们回到甚至比平常更加低效.
intVec
除了滚动我自己的自定义排序算法之外,如何matrix
在不复制任何元素matrix
和调用vector
复制构造函数的情况下对锁步的第一维进行排序和重新排序?
A 的
vector<double>
复制成本很高,因此例如将 intVec 和矩阵复制到 avector<pair<int, vector<double> >
,对其进行排序然后将它们复制回来甚至比平常更加低效。
获得所需优化的最简单方法是将源元素交换vector<vector<double>>
到临时向量中vector<pair<int, vector<double>>
,对其进行排序,然后将它们交换回原始向量中的新位置。
仍然会有比严格必要的开销更多的开销(例如构造和销毁空向量)。但是,不会复制任何向量,并且代码与您已有的代码非常相似。因此,如果您认为问题在于复制成本是正确的,那么问题就解决了。
在 C++11 中,您可以双向移动而不是交换。我怀疑使用空向量移动和交换之间存在很大的性能差异,但我不确定是否存在差异。
归档时间: |
|
查看次数: |
1767 次 |
最近记录: |