元组有一个隐含的词典比较吗?

时间:2014-05-23 10:37:47

标签: c++ c++11 tuples

排序时,例如对的矢量:

vector<pair<int, double>> v;
sort(v.begin(), v.end());

您无需指定排序标准以根据对的词典顺序进行排序,因为,如果未指定其他方式,则应用词典比较。

元组的行为标准是否类似?

在VS2012中编译

vector<tuple<int, double, char>> tv;
sort(tv.begin(), tv.end());

但是这样做的标准是什么?

3 个答案:

答案 0 :(得分:8)

他们这样做,请参阅operator==,!=,<,<=,>,>=(std::tuple)

operator==
operator!=
operator<
operator<=
operator>
operator>=
     

按字典顺序比较元组中的值

答案 1 :(得分:6)

根据标准[ 20.4.2.7关系运算符]:是

tuple的重载运算符:

 template<class... TTypes, class... UTypes>
 constexpr bool operator<(const tuple<TTypes...>& t, 
 const tuple<UTypes...>& u);

返回: t和u之间的词典比较结果。

结果定义为:

(bool)(get<0>(t) < get<0>(u)) ||(!(bool)(get<0>(u) < get<0>(t)) && ttail < utail)

其中某些元组rtail的{​​{1}}是包含除r的第一个元素以外的所有元组的元组。  对于任何两个零长度元组ref都会返回e < f

答案 2 :(得分:3)

20.4.2.7 Relational operators [tuple.rel]

template<class... TTypes, class... UTypes>
bool operator<(const tuple<TTypes...>& t, const tuple<UTypes...>& u);
  

返回:t和u之间的字典比较结果。结果定义为:

(bool)(get<0>(t) < get<0>(u)) || (!(bool)(get<0>(u) < get<0>(t)) && ttail < utail) 
  

其中一些元组r的rtail是一个包含除r的第一个元素之外的所有元组的元组。对于任何两个零长度的元组e和f,e&lt; f返回false。

所以不,他们没有隐含的,他们有一个明确的