C :对矢量进行排序< struct>(结构有2个整数)基于结构的整数之一
C++: Sort a vector<struct> (where struct has 2 integers) based on the one of the integers of struct
在以下C 片段中,
如何基于twiNints struct 中的元素" int a"对向量" twiNtsvec"进行排序。即,我需要放置" TwiNtsvec [i],它的" TwiNtsvec [i] .a"在第一名,依此类推,依此类推,依此类推。
在下面的示例中
struct TwoInts
{
int a;
int b;
};
void PushToVector(int a, int b, std::vector<TwoInts>& TwoIntsVec)
{
TwoInts temp;
temp.a = a;
temp.b = b;
TwoIntsVec.push_back(temp);
}
int main()
{
std::vector<TwoInts> TwoIntsVec;
PushToVector(21,3,TwoIntsVec);
PushToVector(7,3,TwoIntsVec);
PushToVector(12,3,TwoIntsVec);
PushToVector(9,3,TwoIntsVec);
PushToVector(16,3,TwoIntsVec);
// Below sort would NOT work here, as TwoIntsVec is
// not a std::vector<int>
std::sort( TwoIntsVec.begin(), TwoIntsVec.end());
// HOW TO MAKE THE SORT BASED ON the element "int a" in
TwoInts struct
}
您需要将适当的比较功能传递给std::sort
,因为TwoInts
没有适当的比较操作员。请参阅此处的Overload#3,其中包含此比较参数的描述:
comp - 比较函数对象(即满足比较要求的对象),该对象如果第一个参数小于第二个参数(即之前订购),则返回
true
。[...]
一个C 11选项是通过lambda:
std::sort( TwoIntsVec.begin(), TwoIntsVec.end(),
[](const TwoInts& lhs, const TwoInts& rhs){ return lhs.a < rhs.a; });
如果您发现这需要太多打字,则可以使用这样的增压HOF构造谓词:
#include <boost/hof/proj.hpp>
#include <boost/hof/placeholders.hpp>
using namespace boost::hof;
std::sort(TwoIntsVec.begin(), TwoIntsVec.end(), proj(&TwoInts::a, _ < _));
或作为C 20预告片:
std::ranges::sort(TwoIntsVec, std::less<>{}, &TwoInts::a);
作为旁注,我建议您直接通过
填充矢量// Less complicated than doing the same thing in a function:
TwoIntsVec.push_back({21, 3});
TwoIntsVec.push_back({7, 3});
// ...
相关文章:
- Qsort() 比较结构体整数的总和
- 如何修改此函数,以便如果函数的参数是特定结构,则返回具有较大整数的结构?
- boost::任何带有结构体和无符号整数
- 如何在 C++11 编译时构建具有递增值的整数成员的结构序列
- 结构上溢出的整数加法
- 如何将结构名称更改为整数?
- 从低到高组织整数并在C++中使用结构
- 结构中的整数、字符和浮点数
- C 中的内存模型:为什么在同一内存位置分配了结构中的两个整数
- C :对矢量进行排序&lt; struct&gt;(结构有2个整数)基于结构的整数之一
- 在指向结构的指针中访问指向整数的指针
- C MPI创建并发送具有字段char [16]和整数的结构数组
- C++ - 泛型结构的成员在分配双精度时给出错误的值(但适用于整数)
- 在英特尔x86体系结构上使用非AVX指令修改xmm整数寄存器值
- 在处理结构模板中的整数时如何修复"X 不是类模板"?
- 可用于存储和管理整数集合的最佳C++数据结构是什么
- 哪种数据结构和设计用于选择最佳整数集
- 为什么使用 24 位整数时结构大小不会改变
- 将整数结构转换为位掩码
- 如何将整数结构初始化为零