我正在移植一些我現在寫的使用std庫容器的舊手卷處理類。我無法移植的一種方法就是我稱之爲「ChangeRecordOrder」,因爲缺少更好的術語。我需要一個標準的庫替換。如何將std :: vector的某些元素移動到向量中的新索引?
它的定義是:
template <class T>
void ChangeRecordOrder(std::vector<T> IN OUT &inputVector,
uint newInsertIndex,
std::vector<uint> IN const &indexesToMoveToNewIndex);
例如(僞碼):
MyVector<uint> = {0,10,20,30,40,50,60,70,80,90}
IndexesToMove = {2,4}
NewIndex = 6
After call to ChangeRecordOrder(MyVector, NewIndex, IndexesToMove):
MyVector<uint> == {0,10,30,50,20,40,60,70,80,90}
注意,在2和4(20和40)中的元素,被轉移到的索引6原始矢量(在60之前)。
當然我想這樣做,而不是使用另一個臨時向量。我也不介意IndexesToMove矢量在調用之前需要排序的要求。
我找不到這個std lib算法。我以前在原始內存中工作過的算法並沒有使用C++移動語義。
謝謝!
我在僞代碼後面添加了一個註釋,希望能夠解決問題。如果沒有,請告訴我,我會盡力澄清。 –
@ScottKemp這是一個相當具體的操作。你可以用一系列'std :: rotate'來實現它。 –
實際上,這可以通過一個std :: stable_partition完成。更高效的取決於所涉及的不同尺寸 – MikeMB