📅  最后修改于: 2023-12-03 15:24:57.050000             🧑  作者: Mango
在使用多重映射容器时,我们有时需要遍历给定键的所有值。在这篇文章中,我们将介绍如何在C++和Python中实现这个操作。
unordered_multimap
是C++11标准中引入的一种关联容器,支持在O(1)时间内查找,插入和删除元素。下面是利用unordered_multimap
遍历给定键的所有值的代码示例:
#include <unordered_map>
#include <iostream>
using namespace std;
int main() {
unordered_multimap<int, string> umm;
// 插入元素
umm.insert({1, "apple"});
umm.insert({2, "banana"});
umm.insert({1, "orange"});
umm.insert({3, "peach"});
umm.insert({1, "pear"});
// 遍历指定键值对应的所有元素
auto range = umm.equal_range(1);
for (auto it = range.first; it != range.second; ++it) {
cout << it->second << endl;
}
return 0;
}
输出结果为:
apple
orange
pear
multimap
是C++标准STL中的一种关联容器,它也支持在O(logN)时间内查找,插入和删除元素。我们可以通过multimap
的成员函数equal_range()
和iterator
来访问指定键对应的所有元素。下面是利用multimap
遍历给定键的所有值的代码示例:
#include <map>
#include <iostream>
using namespace std;
int main() {
multimap<int, string> mm;
// 插入元素
mm.insert({1, "apple"});
mm.insert({2, "banana"});
mm.insert({1, "orange"});
mm.insert({3, "peach"});
mm.insert({1, "pear"});
// 遍历指定键值对应的所有元素
auto range = mm.equal_range(1);
for (auto it = range.first; it != range.second; ++it) {
cout << it->second << endl;
}
return 0;
}
输出结果同样为:
apple
orange
pear
在Python中,我们可以使用列表推导式或filter()
函数来实现遍历给定键的所有值。
collections
模块中的defaultdict
和multidict
实现了多重映射容器的功能。我们可以使用collections
模块中的defaultdict
来实现遍历给定键的所有值。下面是使用defaultdict
实现遍历给定键的所有值的代码示例:
from collections import defaultdict
d = defaultdict(list)
d[1].append('apple')
d[2].append('banana')
d[1].append('orange')
d[3].append('peach')
d[1].append('pear')
# 遍历指定键值对应的所有元素
for v in d[1]:
print(v)
输出结果为:
apple
orange
pear
我们也可以使用列表推导式或filter()
函数来实现遍历给定键的所有值。下面是使用字典推导式和 filter() 函数实现遍历给定键的所有值的代码示例:
data = {1: ['apple', 'orange', 'pear'], 2: ['banana'], 3: ['peach']}
key = 1
# 列表推导式
vals = [v for k, vs in data.items() if k == key for v in vs]
print(vals)
# filter() 函数
vals = list(filter(lambda v: key in data and v in data[key], data.values()))
print(vals)
输出结果同样为:
['apple', 'orange', 'pear']