2013-08-03 83 views
-4

如果我有一个vector<pair<int,int> >数据类型,什么是第二,如果首创相等,由一对的第一个元素进行排序,然后将接受的方式?比如,也许(1,10),(3,3),(7,13),(7,16),(8,1),(8,2),(15,2)等按C++中的第一个元素对中的第二个元素对一个对的向量排序?

+1

'的std :: sort'自定义比较 – Borgleader

+1

呃,伙计,你要通过第二,如果首创等于排序,但你对我的回答您的评论,否则说。 – nneonneo

+0

您最初对我的问题发表了评论:*“第二种维护秩序的任何方式?”*那么究竟是什么问题呢? –

回答

8

默认比较第一个元素,然后第二个。所以,如果你不关心维护时的第一要素比较相等的顺序,那么你可以只使用std::sort

std::sort(v.begin(), v.end()); 
+0

这就是我已经使用,但它似乎没有按预期工作 – MyNameIsKhan

+0

以什么方式?需要注意的是,如果第一个元素相同(而不是保留原始顺序),它将按第二个元素排序。 – nneonneo

+0

@AaststASicilian您可能正在寻找'std :: stable_sort'? – Rapptz

1

std::pairs comparison operators字典顺序比较对,它首先比较的第一要素,那么第二个元素,如果第一个要素是平等的。

Here is an example of using std::vector<std::pair<int, int>> and std::sort

使用std::sort这种方式使用std::pairoperator <,正如上面所说的,对按字母顺序比较。

更新:Here is an example using std::stable_sort and a custom comparison function that compares only the first element

使用std::stable_sort,这样保证了平等元素的相对顺序将被保留。也就是说,即使std::pairs的第一个元素相等,原始相对顺序仍然保留。

+0

任何方式在第一次相等时在第二秒增加订单? – MyNameIsKhan

相关问题