排序时,例如对的矢量:
vector<pair<int, double>> v;
sort(v.begin(), v.end());
您无需指定排序标准以根据对的词典顺序进行排序,因为,如果未指定其他方式,则应用词典比较。
元组的行为标准是否类似?
在VS2012中编译
vector<tuple<int, double, char>> tv;
sort(tv.begin(), tv.end());
但是这样做的标准是什么?
答案 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
的第一个元素以外的所有元组的元组。
对于任何两个零长度元组r
和e
,f
都会返回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。
所以不,他们没有隐含的,他们有一个明确的