C++ STL 中的 multimap equal_range()

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 对象,该对象包含了给定键值范围内的所有元素。

我们下面提供一些练习题供读者练习:

  1. 编写一个程序,向 multimap 中插入 10 个随机的整数,然后使用 equal_range() 函数查找键值为 5 的所有元素并输出它们的值。
  2. 在上面的程序中,尝试将插入的元素改为字符串类型,并使用相应的 key_type 和 value_type 类型。

通过本文的学习,相信读者已经对 multimap 容器和 equal_range() 函数有了更深入的了解。在实际应用中,multimap 可以用于存储多个相同的键值,而 equal_range() 函数则可以用于查找多个具有相同键值的元素。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

C++ 教程