组合排序

当一个对象存在多个属性,按照属性先后次序堆对象进行排序:(对象属性的数据类型不一致,有字符串,整型)

例如:

  对象一:"juv", 3, 3, -7 
对象"kad", 0, 3, -6
             对象三:"gui", 0, 9, -6 
对象"opq", 4, 3, -6 

对象"jpb", 0, 3, 0 

按照最后一列属性到第一列属性进行排序。

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

struct Source{
	string name;
	int team_1;
	int team_2;
	int team_3;
	Source(string name, int t1, int t2, int t3) :name(name), team_1(t1), team_2(t2), team_3(t3){}
};

typedef vector<Source> vSource;

class MultiSort{
private:
	Source* _current;
public:
	vSource operator()(vSource& src)
	{
		//标准一排序:
		sort(src.begin(), src.end(), [&](Source& a, Source& b){ return a.team_3 > b.team_3; });
		//标准二排序:
		int count = 0, index = 0;
		for (int i = 0; i <= src.size(); ++i)
		{
			if (i == 0)
			{
				_current = &src[i];
			}
			else if (i < src.size() && _current->team_3 == src[i].team_3)
			{
				count++;
			}
			else
			{
				if (count > 1) //仅在个数大于1进行排序
				{
					sort(src.begin() + index, src.begin() + index + count, [&](Source& a, Source& b){ return a.team_2 > b.team_2; });
					Source *inner_current2 = &(src[index]);
					int inner_index2 = index, inner_count2 = 0;
					for (int ii = index; ii <= index + count; ++ii)
					{
						if (ii == index)
						{
							inner_current2 = &src[ii];
						}
						else if (ii < index + count && inner_current2->team_2 == src[ii].team_2)
						{
							inner_count2++;
						}
						else 
						{
							if (inner_count2 > 1) //仅在个数大于1进行排序
							{
								sort(src.begin() + inner_index2, src.begin() + inner_index2 + inner_count2, [&](Source& a, Source& b){ return a.team_1 > b.team_1; });
								Source* inner_current3 = &(src[inner_index2]);
								int inner_index3 = inner_index2, inner_count3 = 0;
								for (int iii = inner_index2; iii <= inner_index2 + inner_count2; ++iii)
								{
									if (iii == inner_index2)
									{
										inner_current3 = &src[iii];
									}
									else if (iii < inner_index2 + inner_count2 && inner_current3->team_1 == src[iii].team_1)
									{
										inner_count3++;
									}
									else
									{
										if (inner_count3 > 1) //仅在个数大于1进行排序
										{
											sort(src.begin() + inner_index3, src.begin() + inner_index3 + inner_count3, [&](Source& a, Source& b){ return a.name < b.name; });
										}
										inner_index3 = iii;
										inner_count3 = 1;
										if (iii < inner_index2 + inner_count3 + 1)
										{
											inner_current3 = &src[iii];
										}
									}
								}
							}
							
							inner_index2 = ii;
							inner_count2 = 1;
							if (ii < index + count + 1)
								inner_current2 = &src[ii];
						}
					}
				}
				index = i;
				count = 1;
				if (i < src.size())
					_current = &src[i];
			}
			
		}

		return std::move(src);
	}

	void show(const vSource& dst)
	{
		for (vSource::const_iterator itr = dst.begin(); itr != dst.end(); itr++)
		{
			cout << itr->name << " " << itr->team_1 << " " << itr->team_2 << " " << itr->team_3 << endl;;
		}
		cout << endl;
	}
}multiSort;


int main()
{
	string array_src[][4] = {
		{ "mid", "0", "3", "-6" },
		{ "juv", "3", "3", "-7" },
		{ "kad", "0", "3", "-6" },
		{ "gui", "0", "9", "-6" },
		{ "opq", "4", "3", "-6" },
		{ "jpb", "0", "3", "0" }
	};

	vSource src;

	for (int i = 0; i < 6; ++i)
	{
		string name = array_src[i][0];
		int t1 = stoi(array_src[i][1]);
		int t2 = stoi(array_src[i][2]);
		int t3 = stoi(array_src[i][3]);
		Source one(name, t1, t2, t3);
		src.push_back(one);
	}

	vSource result = multiSort(src);

	multiSort.show(result);

	return 0;
}

运行结果:


在探索智慧旅游的新纪元中,一个集科技、创新与服务于一体的整体解决方案正悄然改变着我们的旅行方式。智慧旅游,作为智慧城市的重要分支,旨在通过新一代信息技术,如云计算、大数据、物联网等,为游客、旅游企业及政府部门提供无缝对接、高效互动的旅游体验与管理模式。这一方案不仅重新定义了旅游行业的服务标准,更开启了旅游业数字化转型的新篇章。 智慧旅游的核心在于“以人为本”,它不仅仅关注技术的革新,更注重游客体验的提升。从游前的行程规划、信息查询,到游中的智能导航、个性化导览,再到游后的心情分享、服务评价,智慧旅游通过构建“一云多屏”的服务平台,让游客在旅游的全过程中都能享受到便捷、个性化的服务。例如,游客可以通过手机APP轻松定制专属行程,利用智能语音导览深入了解景点背后的故事,甚至通过三维GIS地图实现虚拟漫游,提前感受目的地的魅力。这些创新服务不仅增强了游客的参与感和满意度,也让旅游变得更加智能化、趣味化。 此外,智慧旅游还为旅游企业和政府部门带来了前所未有的管理变革。通过大数据分析,旅游企业能够精准把握市场动态,实现旅游产品的精准营销和个性化推荐,从而提升市场竞争力。而政府部门则能利用智慧旅游平台实现对旅游资源的科学规划和精细管理,提高监管效率和质量。例如,通过实监控和数据分析,政府可以迅速应对旅游高峰期的客流压力,有效预防景区超载,保障游客安全。同,智慧旅游还促进了跨行业、跨部门的数据共享与协同合作,为旅游业的可持续发展奠定了坚实基础。总之,智慧旅游以其独特的魅力和无限潜力,正引领着旅游业迈向一个更加智慧、便捷、高效的新代。
内容概要:本文详细介绍了大模型的发展现状与未来趋势,尤其聚焦于DeepSeek这一创新应用。文章首先回顾了人工智能的定义、分类及其发展历程,指出从摩尔定律到知识密度提升的转变,强调了大模型知识密度的重要性。随后,文章深入探讨了DeepSeek的发展路径及其核心价值,包括其推理模型、思维链技术的应用及局限性。此外,文章展示了DeepSeek在多个行业的应用场景,如智能客服、医疗、金融等,并分析了DeepSeek如何赋能个人发展,具体体现在公文写作、文档处理、知识搜索、论文写作等方面。最后,文章展望了大模型的发展趋势,如通用大模型与垂域大模型的协同发展,以及本地部署小模型成为主流应用渠道的趋势。 适合人群:对人工智能和大模型技术感兴趣的从业者、研究人员及希望利用DeepSeek提升工作效率的个人用户。 使用场景及目标:①了解大模型技术的最新进展和发展趋势;②掌握DeepSeek在不同领域的具体应用场景和操作方法;③学习如何通过DeepSeek提升个人在公文写作、文档处理、知识搜索、论文写作等方面的工作效率;④探索大模型在特定行业的应用潜力,如医疗、金融等领域。 其他说明:本文不仅提供了理论知识,还结合实际案例,详细介绍了DeepSeek在各个场景下的应用方式,帮助读者更好地理解和应用大模型技术。同,文章也指出了当前大模型技术面临的挑战,如模型的局限性和数据安全问题,鼓励读者关注技术的持续改进和发展。
### Java Comparator 组合排序 示例教程 在Java中,`Comparator`接口允许开发者定义自定义比较逻辑来对对象列表进行排序。当涉及到多个属性的组合排序,可以通过链式调用来实现复杂的排序需求。 #### 创建 `Person` 类用于演示 为了展示如何使用`Comparator`进行多字段排序,先创建一个简单的类`Person`: ```java class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } // Getters and toString method omitted for brevity. } ``` #### 使用 `Comparator` 进行单个条件排序 对于单一条件的排序可以直接利用lambda表达式简化代码结构: ```java List<Person> people = Arrays.asList( new Person("Alice", 30), new Person("Bob", 25), new Person("Charlie", 35)); people.sort(Comparator.comparingInt(Person::getAge)); ``` 这段代码按照年龄升序排列人员名单[^1]。 #### 实现组合排序 要基于两个或更多标准来进行排序,比如按年龄降序再按名字字典顺序升序,可以这样写: ```java people.sort(Comparator.comparingInt(Person::getAge).reversed() .thenComparing(Person::getName)); ``` 这里首先根据年龄做逆向(即降序)排序,之后在同一年龄段内依据姓名首字母正向(即升序)排序[^2]。 #### 复杂类型的组合排序 如果需要处理更复杂的数据类型,例如包含字符串和其他数值型成员变量的对象集合,也可以采用相同的方式构建复合比较器。考虑下面的例子,在其中我们不仅有整数还有字符串作为排序键: ```java // 假设有一个含有name (String), score (int), gradeLevel (char) 的Student类 students.sort(Comparator.comparing(Student::getGradeLevel) .thenComparingInt(Student::getScore) .thenComparing(Student::getName)); ``` 此段代码实现了对学生记录先按年级等级(`gradeLevel`)、接着分数(`score`)最后学生名(`name`)依次递增排序的功能[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值