矢量<对<int,int>>的比较器
Comparator for vector<pair<int,int>>
vector<pair<int,int> > v;
for(i=0;i<5;i++){
cin>>b>>c;
v.push_back(make_pair(b,c));
}
sort(v.begin(),v.end());
是否有可能为排序函数编写比较器,使v[i].first
按递增顺序排序,并且对于v[i].first
的相似值,v[i].second
按递减顺序排序?
如:-
我/p:
13 10
44 15
13 15
13 99
6 45
o/p:
6 45
13 99
13 15
13 10
44 15
这是一个紧凑的比较函数对象,可以满足您的要求:(使用c++ 11的特性)
struct Shivam {
typedef std::pair<int, int> const& param_type;
bool operator()(param_type lhs, param_type rhs) const {
return std::tie(lhs.first, rhs.second) < std::tie(rhs.first, lhs.second);
};
};
并像这样使用:
std::sort(std::begin(v), std::end(v), Shivam{});
当然,这很容易。
你所需要做的就是用这个签名写一个函数:
bool f(std::pair<int, int> lhs, std::pair<int, int> rhs);
函数当且仅当lhs < rhs
true
因此,根据您的标准,lhs
小于rhs
,如果:
-
lhs.first < rhs.first
, - 或
lhs.first == rhs.first && lhs.second > rhs.second
把它们放在一起,就得到:
bool mycomparer(std::pair<int, int> lhs, std::pair<int, int> rhs) {
if (lhs.first < rhs.first) {
return true;
}
else if (lhs.first == rhs.first && lhs.second > rhs.second) {
return true;
}
else {
return false;
}
}
这可以写得更紧凑,但我想保持它的简单和可读性,以理解这一点。:)
相关文章:
- 为什么在全局范围内使用"extern int a"似乎不行?
- int(c) 和 c-'0' 之间的区别。C++
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 为什么野牛仍在使用"int yylex(void)",却找不到"int yylex(YYS
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 是否可以从int转换为enum类类型
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- 呼叫运营商<<临时
- 'short int'持有的值溢出,但"自动"不会溢出?
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- 调用'begin(int [n])'没有匹配函数
- 错误:调用"std::vector<:vector<int>>::p ush_back(std::vector<std::__cxx11::basic_string<
- 为什么将此对向量&lt; map&lt; int,int&gt;&gt;中的地图进行更新.失败
- 如何加入向量&lt; int&gt;到C 中的单个INT
- 是numeric_limits&lt; int&gt; :: is_modulo从逻辑上矛盾
- 运营商&lt;&lt;无法访问班级的私人int
- std::pair的默认构造函数<>将基本类型(int等)设置为零
- 如何显示/打印字符串对象?cout & lt; & lt;Int工作,count <<字符串