diff abstract vectors and take a keyfn as arg for reordering