按升序对矢量的相同元素进行排序
sort same elements of vector in ascending order
bool third_parameter(const pair<long long,long long> &a,
const pair<long long,long long> &b)
{
return a.second>b.second;
}
int main (){
sort(vec.begin(), vec.end(), third_parameter );
return 0;
}
我在这里使用这种排序技术,但是当涉及到向量的相同元素时,这并不能保证我任何事情。我正在使用一个对向量,它在 .first 中具有递增的数字 i,在 .second 中具有一个 int。我希望当它找到两个相等的 .second 元素时,按 .first 的升序对它们进行排序。
在这种情况下
仍然可以使用std::tie
,只需注意正确排序变量即可。
bool custom_compare(const pair<long long, long long> &a,
const pair<long long, long long> &b)
{
return std::tie(b.second, a.first) < std::tie(a.second, b.first);
}
std::sort(vec.begin(), vec.end(), custom_compare);
我们使用积分的另一个选项是"x 的降序"是"-x 的升序":
所以
bool custom_compare(const pair<long long, long long> &a,
const pair<long long, long long> &b)
{
return std::make_tuple(-a.second, a.first) < std::make_tuple(-b.second, b.first);
}
std::sort
要求您定义小于运算符。在代码中输入 2 个元素如何相互行为的技巧。
bool third_parameter(const pair<long long,long long> &a,
const pair<long long,long long> &b)
{
if (a.second != b.second)
return a.second > b.second;
// When second is equal, sort based on first, largest values first
return a.first < b.first;
}
int main (){
sort(vec.begin(), vec.end(), third_parameter );
return 0;
}
我确实建议将该方法重命名为更具表现力的方法。
相关文章:
- 查找两个排序向量中共有的元素
- C++ 如何比较n个排序的整数向量以找到互元素?
- 如何在 c++ 中根据第二个元素按降序对列表进行排序
- 对的排序向量 (std::vector<pair<int, int>>) 按对的第一个元素搜索并更新第二个元素值
- 高级选择排序 - 在一次迭代中搜索两个元素
- 为什么用户定义的函数不按照给定的顺序对相同长度的元素进行排序?
- 为什么这个选择排序算法仍然切换一个元素,当它已经是其他元素中最小的元素时?
- 快速排序 - 三个中位数枢轴选择 - 某些元素顺序不正确
- 将一系列已排序的元素划分为相邻组
- 如何通过保持第一个插入的位置来对列表中插入的其余元素进行排序?
- 保持排序的数据结构,允许log N插入时间,并且可以返回我在log N中查找的元素的索引
- "x"的所有元素都存在于"y"(排序向量)中吗?
- 如何根据对的第二个元素对 STL c++ 中的一组对进行排序?
- 如何在保持它们连接到同一元素的同时对 2 个数组进行排序?
- 使用 pair 创建priority_queue,以便在第一个元素相等时"<"第一个元素的排序,对第二个元素">"排序
- 如何将元素排序到矩阵C++
- 如何保持按第二个元素排序的对的优先级队列?
- 如何从两个数组中生成一对向量,然后使用CUDA/Thrust按对的第一个元素排序
- 部分排序数组,最后n个元素排序
- 如何对一对向量按降序排序,并按第二个元素排序