C++ STL 中的 multimap equal_range()
在 C++ STL 中,multimap 是个非常有用的容器,它可以存储多个相同的键值。而 equal_range() 函数则是 multimap 容器提供的一个用于查找元素的方法,它可以返回一组范围内的所有元素,其键值与指定的键值相同。
下面我们将深入研究 multimap 以及它的 equal_range() 函数。
multimap 容器概述
multimap 是一个关联式容器,它允许存储多个相同的键值,并且按键值的顺序来排序存储。它是以红黑树(红黑树是一种自平衡二叉查找树)来实现的。multimap 容器的模板定义如下:
template < class Key, class T, class Compare = less<Key>, class Allocator = allocator<pair<const Key, T>> > class multimap;
我们可以通过以下方式来定义并初始化 multimap 容器:
#include <iostream>
#include <map>
using namespace std;
int main(){
multimap<int, int> m;
m.insert(pair<int, int>(1, 0));
m.insert(pair<int, int>(2, 2));
m.insert(pair<int, int>(1, 3));
m.insert(pair<int, int>(3, 1));
m.insert(pair<int, int>(1, 2));
multimap<int, int>::iterator it;
for(it=m.begin(); it!=m.end(); it++){
cout << it->first << ":" << it->second << endl;
}
return 0;
}
上面的代码会输出以下结果:
1:0
1:3
1:2
2:2
3:1
上面的代码中,我们通过 insert() 函数将一些元素插入到了 multimap 容器中。注意,在 multimap 中,相同的键值可以被插入多次。
multimap 的 equal_range() 函数
equal_range() 函数是 multimap 中用于查找元素的方法。它会返回一个 pair 对象,该对象包含了给定键值范围内的所有元素。equal_range() 函数的用法如下:
pair<iterator,iterator> equal_range(const key_type& k);
其中,key_type 是 multimap 的键类型,iterator 是 multimap 迭代器类型。
下面的代码演示了 equal_range() 函数的使用:
#include <iostream>
#include <map>
using namespace std;
int main(){
multimap<int, int> m;
m.insert(pair<int, int>(1, 0));
m.insert(pair<int, int>(2, 2));
m.insert(pair<int, int>(1, 3));
m.insert(pair<int, int>(3, 1));
m.insert(pair<int, int>(1, 2));
multimap<int, int>::iterator it, it2;
pair<multimap<int,int>::iterator,multimap<int,int>::iterator> ret;
ret = m.equal_range(1); //查找键值为1的元素
cout << "multimap 中键值为 1 的元素有:" << endl;
for(it=ret.first; it!=ret.second; it++){
cout << it->first << ":" << it->second << endl;
}
return 0;
}
上面的代码会输出以下结果:
multimap 中键值为 1 的元素有:
1:0
1:3
1:2
上面的代码中,我们在 multimap 中使用了 equal_range() 函数来查找键值为 1 的元素,并将它们输出。
总结
multimap 是一个非常有用的容器,它允许存储多个相同的键值,并且按照键值的顺序进行排序。而 equal_range() 则是 multimap 容器提供的用于查找元素的方法,可以返回一个 pair 对象,该对象包含了给定键值范围内的所有元素。
我们下面提供一些练习题供读者练习:
- 编写一个程序,向 multimap 中插入 10 个随机的整数,然后使用 equal_range() 函数查找键值为 5 的所有元素并输出它们的值。
- 在上面的程序中,尝试将插入的元素改为字符串类型,并使用相应的 key_type 和 value_type 类型。
通过本文的学习,相信读者已经对 multimap 容器和 equal_range() 函数有了更深入的了解。在实际应用中,multimap 可以用于存储多个相同的键值,而 equal_range() 函数则可以用于查找多个具有相同键值的元素。