1、版本1:根据元素的“<”运算符比较元素
#define debug qDebug()<<
int main(int argc, char *argv[])
{
QList<int> list1,list2,list3;
QRandomGenerator * rander = QRandomGenerator::global();
for (int var = 0; var < 10; ++var)
{
list1 << rander->bounded(100);
list2 << rander->bounded(100);
}
std::sort(list1.begin(),list1.end());
std::sort(list2.begin(),list2.end());
debug list1;
debug list2;
std::merge(list1.begin(),list1.end(),list2.begin(),list2.end(),std::back_inserter(list3));
debug list3;
}
生成随机数->排序->合并。 C++/Qt随机数
2、版本2:根据自定义的排序规则进行排序后合并
struct ceshi
{
int frist = 0;
int second = 0;
};
#define debug qDebug()<<
int main(int argc, char *argv[])
{
QList<ceshi> list1,list2,list3;
QRandomGenerator * rander = QRandomGenerator::global();
for (int var = 0; var < 3; ++var)
{
ceshi c;
c.frist = rander->bounded(100);
c.second = rander->bounded(100);
list1 << c;
c.frist = rander->bounded(100);
c.second = rander->bounded(100);
list2 << c;
}
std::sort(std::begin(list1),std::end(list1),[](const ceshi& c1, const ceshi& c2)
{
return c1.second < c2.second;
});
std::sort(std::begin(list2),std::end(list2),[](const ceshi& c1, const ceshi& c2)
{
return c1.second < c2.second;
});
std::for_each(list1.begin(),list1.end(),[](const ceshi & value)
{
debug value.frist << value.second;
});
debug endl;
std::for_each(list2.begin(),list2.end(),[](const ceshi & value)
{
debug value.frist << value.second;
});
debug endl;
std::merge(list1.begin(),list1.end(),list2.begin(),list2.end(),std::back_inserter(list3),[](const ceshi& c1, const ceshi& c2)
{
return c1.second < c2.second;
});
std::for_each(list3.begin(),list3.end(),[](const ceshi & value)
{
debug value.frist << value.second;
});
}
对于自定义的结构体元素,自定义排序时认为ceshi.second较大者则这个元素较大。泛型算法:排序算法sort()
排序sort()和合并merge()的符号要一致
- < 升序
- > 降序
若不一致最终得到的序列不是有序的。