c++ stl multimap基本操作使用技巧详细介绍

 c++ stl multimap基本操作使用技巧详细介绍

C++ stl  Multimap 和C++ stl  map 很相似,但是MultiMap允许重复的元素。

C++ stl  Multimap的基本操作成员函数列表介绍如下:


begin()返回指向第一个元素的迭代器

clear()删除所有元素

count()返回一个元素出现的次数

empty()如果multimap为空则返回真

end()返回一个指向multimap末尾的迭代器

equal_range()返回指向元素的key为指定值的迭代器对

erase()删除元素

find()查找元素

get_allocator()返回multimap的配置

insert()插入元素

key_comp()返回比较key的函数

lower_bound()返回键值>=给定元素的第一个位置

max_size()返回可以容纳的最大元素个数

rbegin()返回一个指向mulitmap尾部的逆向迭代器

rend()返回一个指向multimap头部的逆向迭代器

size()返回multimap中元素的个数

swap()交换两个multimaps

upper_bound()返回键值>给定元素的第一个位置

value_comp()返回比较元素value的函数



 C++ stl  Multimap使用方法代码举例1:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
//multimap允许重复的键值插入容器
//        **********************************************************    
//        * pair只包含一对数值:pair<int,char>                       *
//        * map是一个集合类型,永远保持排好序的,                   *
//  pair  * map每一个成员就是一个pair,例如:map<int,char>           *
//        * map的insert()可以把一个pair对象作为map的参数,例如map<p> *
//        ***********************************************************
#pragma warning(disable:4786)
#include<map>
#include<iostream>
using  namespace  std;
int  main( void )
{
  multimap< int , char *> m;
  //multimap的插入只能用insert()不能用数组
  m.insert(pair< int , char *>(1, "apple" ));
     m.insert(pair< int , char *>(1, "pear" )); //apple和pear的价钱完全有可能是一样的
  m.insert(pair< int , char *>(2, "banana" ));
  //multimap的遍历只能用迭代器方式不能用数组
  cout<< "***************************************" <<endl;
  multimap< int , char *>::iterator i,iend;
  iend=m.end();
  for (i=m.begin();i!=iend;i++)
  {
   cout<<(*i).second<< "的价钱是"
    <<(*i).first<< "元/斤n" ;
  }
  cout<< "***************************************" <<endl;
     //元素的反相遍历
  multimap< int , char *>::reverse_iterator j,jend;
  jend=m.rend();
  for (j=m.rbegin();j!=jend;j++)
  {
   cout<<(*j).second<< "的价钱是"
    <<(*j).first<< "元/斤n" ;
  }
  cout<< "***************************************" <<endl;
  //元素的搜索find(),pair<iterator,iterator>equal_range(const key_type &k)const
     //和multiset的用法一样
  multimap< int , char *>::iterator s;
  s=m.find(1); //find()只要找到一个就行了,然后立即返回。
  cout<<(*s).second<< "    "
   <<(*s).first<<endl;
  cout<< "键值等于1的元素个数是:" <<m.count(1)<<endl;
  cout<< "***************************************" <<endl;
  //删除 erase(),clear()
  m.erase(1);
     for (i=m.begin();i!=iend;i++)
  {
   cout<<(*i).second<< "的价钱是"
    <<(*i).first<< "元/斤n" ;
  }
     return  0;
}


  C++ stl  Multimap指定某个键值,进行遍历代码举例2

  可以使用lower_bound和upper_bound函数进行遍历,也可以使用函数equal_range。其返回的是一个游标对。游标对pair::first是由函数lower_bound得到

的x的一个值,游标对pair::second的值是由函数upper_bound得到的x的后一个值。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
multimap< int , int > a;
a.insert(pair< int , int >(1,11));
a.insert(pair< int , int >(1,12));
a.insert(pair< int , int >(1,13));
a.insert(pair< int , int >(2,21));
a.insert(pair< int , int >(2,22));
a.insert(pair< int , int >(3,31));
a.insert(pair< int , int >(3,32));
multimap< int , int >::iterator p_map;
pair<multimap< int , int >::iterator, multimap< int , int >::iterator> ret;
for (p_map = a.begin() ; p_map != a.end();)
{
     cout<<p_map->first<< " =>" ;
     ret = a.equal_range(p_map->first);
     for (p_map = ret.first; p_map != ret.second; ++p_map)
         cout<< "" << (*p_map).second;
     cout<<endl;
}


   C++ stl  Multimap详细代码举例3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <iostream>
#include <string>
#include <map>
using  namespace  std;
typedef  struct  employee
{
//Member Function
public :
  employee( long  eID, string e_Name,  float  e_Salary);
//Attribute
public :
  long  ID;                   //Employee ID
  string name;               //Employee Name
  float  salary;            //Employee Salary
}employee;
//创建multimap的实例,整数(职位编号)映射员工信息
typedef  multimap< int , employee> EMPLOYEE_MULTIMAP;
typedef  multimap< int , employee>::iterator EMPLOYEE_IT;            //随机访问迭代器类型
typedef  multimap< int , employee>::reverse_iterator EMPLOYEE_RIT;   //反向迭代器类型
employee::employee( long  eID, string e_Name,  float  e_Salary)
          : ID(eID), name(e_Name), salary(e_Salary) {}
//函数名:output_multimap
//函数功能:正向输出多重映射容器里面的信息
//参数:一个多重映射容器对象
void  output_multimap(EMPLOYEE_MULTIMAP employ)
{
  EMPLOYEE_IT employit;
  for  (employit = employ.begin(); employit != employ.end(); employit++)
  {
   cout << (*employit).first <<  't'  << (*employit).second.ID
    <<  't'  << (*employit).second.name <<  't'  << (*employit).second.salary
    <<  't'  << endl;
  }
}
//函数名:reverse_output_multimap
//函数功能:逆向输出多重映射容器里面的信息
//参数:一个多重映射容器对象
void  reverse_output_multimap(EMPLOYEE_MULTIMAP employ)
{
  EMPLOYEE_RIT employit;
  for  (employit = employ.rbegin(); employit != employ.rend(); employit++)
  {
   cout << (*employit).first <<  't'  << (*employit).second.ID
    <<  't'  << (*employit).second.name <<  't'  << (*employit).second.salary
    <<  't'  << endl;
  }
}
int  main( int  argc,  char  *argv[])
{
      EMPLOYEE_MULTIMAP employees;        //多重映射容器实例
      //下面四个语句分别构造一个员工对象插入到多重映射容器
   //注意因为是多重映射,所以可以出现重复的键,例如下面的信息有两个职位编号为118的员工
   employees.insert(EMPLOYEE_MULTIMAP::value_type(118, employee(100,  "luojiafeng" , 8000)));
   employees.insert(EMPLOYEE_MULTIMAP::value_type(112, employee(101,  "luojiahui" , 6000)));
   employees.insert(EMPLOYEE_MULTIMAP::value_type(113, employee(102,  "luokaifeng" , 10000)));
   employees.insert(EMPLOYEE_MULTIMAP::value_type(118, employee(103,  "xujinghua" , 20000)));
   //正序输出多重映射容器中的信息
   cout <<  "职位编号"  <<  "员工ID"  <<  't'
    <<  "姓名"  <<  't'  <<  't'  <<  "工资"  << endl;
   output_multimap(employees);
   //逆序输出多重映射容器中的信息
   cout <<  "职位编号"  <<  "员工ID"  <<  't'
    <<  "姓名"  <<  't'  <<  't'  <<  "工资"  << endl;
   reverse_output_multimap(employees);
   //输出容器内的记录条数
   cout<<  "共有"  << employees.size() <<  "条员工记录"  << endl;
      return  0;
}
  • 9
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
C++ STL中的map和multimap是关联容器,用于存储键值对(key-value pairs),其中每个键(key)唯一对应一个值(value)。 map是一个有序容器,根据键的大小进行自动排序,默认按照键的升序进行排序。每个键只能在map中出现一次,如果尝试插入具有相同键的元素,新元素将替代旧元素。 multimap也是一个有序容器,与map不同的是,它允许多个具有相同键的元素存在。多个具有相同键的元素将按照插入的顺序进行存储,而不会自动排序。 这两个容器都提供了一系列的操作函数,如insert、erase、find等,用于插入、删除和查找元素。 以下是一个使用map的简单示例: ```cpp #include <iostream> #include <map> int main() { std::map<std::string, int> scores; scores.insert(std::make_pair("Alice", 90)); scores.insert(std::make_pair("Bob", 80)); scores.insert(std::make_pair("Charlie", 70)); // 查找并输出Bob的分数 std::cout << "Bob's score: " << scores["Bob"] << std::endl; // 遍历并输出所有键值对 for (const auto& pair : scores) { std::cout << pair.first << ": " << pair.second << std::endl; } return 0; } ``` 上述示例中,我们创建了一个存储string类型键和int类型值的map容器scores。通过insert函数依次插入了三个键值对。然后我们通过scores["Bob"]来获取Bob的分数,并输出结果为80。 接着我们使用范围-based for循环遍历map中的所有键值对,并输出每个键值对的键和值。 multimap的用法与map类似,只是它允许多个具有相同键的元素存在。 这些关联容器在查找和插入操作上具有较高的效率,特别适用于需要根据键进行快速查找的场景。在实际应用中,你可以根据自己的需求选择适合的容器类型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值