Then I don't understand what you mean
Yes, I was not very clear, I will try to explain more detailed.
I have N vectors, all the same length, filled with some data.
Let's say it represents a particle system for a game, one vector contains positions of particles, another contain colors, third contains sizes
That's how I can find data for the first particle
size_t particleIdx = 0;
Vector2D pos = soa.positions[particleIdx];
Color color = soa.colors[particleIdx];
float size = soa.sizes[particleIdx];
Now imagine that for some reason I want to sort all this struct (each array of the struct) in a way that the particles will be stored from the smallest to the largest.
So in the resulting struct the vector sizes will be just sorted ascending, the other two vectors will have their elements in position corresponding to positions of items in this sizes vector.
Let's say our smallest element in sizes was on position 8 previously, the new position after the sort is 0. Then in positions vector we will move the element that was on 8th position also to 0, and the same with colors vector.