A vector of vectors would be more efficient to traverse for large values of [n], but if the vectors are not the same length you need to check to make sure index [n] exists in each one. If you are going to handle random insertions of data you also have to worry about growing a vector(s) if the requested [n] is larger than the vector size.
A simple and elegant (though perhaps not the most efficient?) solution is to use a hashtable to store the cell values:
This example is in Python but you get the idea:
Thanks,
Justin