稳定排序和具有两个比较的排序之间有区别吗?

这是针对C ++的。我知道稳定排序会在牢记原始关系顺序的同时进行排序,但是我记得稳定排序的时间复杂度为O(n * logn ^ 2),所以我想知道:是否将值存储在一对中第一个包含值,第二个包含原始位置(即[5,2,2,3,1]-> [(5,0),(2,1),(2,2),(3 ,3),(1,4)]),然后将其用作比较器:

bool compare(const pair<int,int> &left, const pair<int,int> &right){
     return left.first < right.first || (left.first == right.first && left.second < right.second);
}

那么除了在O(nlogn)时间之外,我不会和稳定排序有相同的效果吗? 如果不是,是什么使它们不同/相似?