c++ map根据value排序以及lamda表达式的应用

本文详细介绍了如何使用C++语言,通过哈希表和排序算法来实现查找数组中前K个高频元素的过程。利用哈希表记录元素频率,然后通过排序算法找出频率最高的K个元素,最后将这些元素存储到结果数组中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

vector<int> topKFrequent(vector<int>& nums, int k) {
	map<int, int> m;
	vector<pair<int, int>> temp;
	vector<int> res;
	for (auto n : nums) {
		m[n]++;
	}
	for (auto i : m) {
		temp.push_back(i);
	}
	std::sort(temp.begin(), temp.end(), [](pair<int, int>& a, pair<int, int>& b) {return a.second > b.second;});
	for (auto i:temp) {
		res.push_back(i.first);
		k--;
		if (k == 0) return res;
	}
}

在Java中,你可以使用`Map`的`entrySet()`方法来获取所有的键值对,然后使用`Stream`和`Lambda表达式`对这些键值对进行排序。这里有一个例子,它根据`List<String>`中的字符串长度对Map进行排序: ```java import java.util.*; import java.util.stream.*; public class Main { public static void main(String[] args) { Map<String, List<String>> map = new HashMap<>(); map.put("One", Arrays.asList("One", "Two", "Three")); map.put("Two", Arrays.asList("Four", "Five")); map.put("Three", Arrays.asList("Six")); // 使用Lambda表达式和Stream排序 Map<String, List<String>> sortedMap = map.entrySet().stream() .sorted(Map.Entry.<String, List<String>>comparingByValue()) .collect(Collectors.toMap( Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, LinkedHashMap::new)); // 使用LinkedHashMap保持插入顺序 sortedMap.forEach((key, value) -> System.out.println(key + ": " + value)); } } ``` 在这个例子中,我们首先创建了一个`Map`,其中键是字符串,值是另一个字符串列表。然后我们使用`stream()`方法来获取一个流,再使用`sorted()`方法对流中的键值对进行排序排序的依据是列表中的字符串长度。最后,我们使用`collect()`方法将流中的元素收集到一个新的`Map`中。这个新的`Map`就是排序后的结果。 注意,这个例子使用了Java 8的特性,包括Lambda表达式和Stream API。如果你的环境不支持这些特性,你可能需要使用不同的方法来对Map进行排序
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值