登录  /  注册

带你详细了解C++中的map(键值对)和set(集合)

烟雨青岚
发布: 2020-07-06 13:48:51
转载
3584人浏览过

带你详细了解C++中的map(键值对)和set(集合)

C++学习:map集合(键值对)

集合(set)与映射(map)属于非线性结构容器类

内部实现上面是平衡二叉树    

map是STL的一个关联性容器,它提供一对一的数据处理能力

其中第一个可以称为关键字,每个关键字只能在map中出现一次
第二个称为该关键字的值

###set集合

begin 语法:

iterator begin();
登录后复制

返回指向当前集合中第一个元素的迭代器。

clear 语法:

void clear();
登录后复制
登录后复制

清除当前集合中的所有元素。

count 语法:

size_type count( const key_type &key );
登录后复制

返回当前集合中出现的某个值的元素的数目。

empty 语法:

bool empty();
登录后复制

如果当前集合为空,返回true;否则返回false。

end 语法:

const_iterator end();
登录后复制

返回指向当前集合中最后一个元素的迭代器。

equal_range 语法:

pair equal_range( const key_type &key );
登录后复制

返回集合中与给定值相等的上下限的两个迭代器。

erase 语法:

void erase( iterator i ); 
void erase( iterator start, iterator end ); 
size_type erase( const key_type &key );
登录后复制

说明:
● 删除i元素;
● 删除从start开始到end结束的元素;
● 删除等于key值的所有元素(返回被删除的元素的个数)。

find 语法:

iterator find( const key_type &key );
登录后复制

在当前集合中查找等于key值的元素,并返回指向该元素的迭代器;如果没有找到,返回指向集合最后一个元素的迭代器。

get_allocator 语法:

allocator_type get_allocator();
登录后复制

返回当前集合的分配器。

insert 语法:

iterator insert( iterator i, const TYPE &val ); 
void insert( input_iterator start, input_iterator end ); 
pair insert( const TYPE &val );
登录后复制

说明:
● 在迭代器i前插入val;
● 将迭代器start开始到end结束返回内的元素插入到集合中;
● 在当前集合中插入val元素,并返回指向该元素的迭代器和一个布尔值来说明val是否成功的被插入了。
(应该注意的是在集合(Sets)中不能插入两个相同的元素。)

lower_bound 语法:

iterator lower_bound( const key_type &key );
登录后复制

返回一个指向大于或者等于key值的第一个元素的迭代器。

key_comp 语法:

key_compare key_comp();
登录后复制

返回一个用于元素间值比较的函数对象。

max_size 语法:

size_type max_size();
登录后复制

返回当前集合能容纳元素的最大限值。

rbegin 语法:

reverse_iterator rbegin();
登录后复制

返回指向当前集合中最后一个元素的反向迭代器。

rend 语法:

reverse_iterator rend();
登录后复制

返回指向集合中第一个元素的反向迭代器。

size 语法:

size_type size();
登录后复制

返回当前集合中元素的数目。

swap 语法:

void swap( set &object );
登录后复制

交换当前集合和object集合中的元素。

upper_bound 语法:

iterator upper_bound( const key_type &key );
登录后复制

在当前集合中返回一个指向大于Key值的元素的迭代器。

value_comp 语法:

value_compare value_comp();
登录后复制

返回一个用于比较元素间的值的函数对象

简单的示例代码:

/*
 * ===========================================================================
 *
 *       Filename:  setTest.cpp
 *    Description:  
 *        Version:  1.0
 *        Created:  2017年07月01日 22时20分58秒
 *       Revision:  none
 *       Compiler:  gcc
 *         Author:   (), 
 *        Company:  
 *
 * ===========================================================================
 */
#include<iostream>
#include<set>
using namespace::std;


void showSet(const set<int> i_set){
  //通过迭代器的形式输出set集合
  cout::const_iterator c_iter;
  for(c_iter = i_set.begin(); c_iter !=i_set.end();c_iter++){
    cout r_set){
  cout::reverse_iterator r_iter;
  for(r_iter = r_set.rbegin();r_iter!=r_set.rend();r_iter++){
    cout first_set;
  //第二种构造函数
  set<int> second_set(array,array+6);
  showSet(second_set);
  //第三种构造函数
  set<int> third_set(second_set.begin(),second_set.end());
  showSet(third_set);

  //set的插入insert函数
  first_set.insert(3);
  first_set.insert(6);
  first_set.insert(5);
  first_set.insert(5);
  showSet(first_set);

  //返回当前集合中出现某个值的数量count
  int count = first_set.count(5);
  cout::iterator iter;
  iter = first_set.find(3);
  first_set.erase(iter);
  showSet(first_set);

  first_set.clear();
  return 0;
}</int></int></int></set></iostream>
登录后复制

###map键值对的使用
C++ Maps
C++ Maps 被用作储存“关键字/值”对

begin 语法:

  iterator begin();
登录后复制

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

clear 语法:

void clear();
登录后复制
登录后复制

clear()函数删除map中的所有元素。

count 语法:

  size_type count( const KEY_TYPE &amp;key );
登录后复制

count()函数返回map中键值等于key的元素的个数。

empty 语法:

  bool empty();
登录后复制

empty()函数返回真(true)如果map为空,否则返回假(false)。

end 语法:

  iterator end();
登录后复制

end()函数返回一个迭代器指向map的尾部。

equal_range Syntax:

  pair equal_range( const KEY_TYPE &amp;key );
登录后复制

equal_range()函数返回两个迭代器——一个指向第一个键值为key的元素,另一个指向最后一个键值为key的元素。

erase 语法:

  void erase( iterator pos );
  void erase( iterator start, iterator end );
  size_type erase( const KEY_TYPE &amp;key );
登录后复制

erase()函数删除在pos位置的元素,或者删除在start和end之间的元素,或者删除那些值为key的所有元素。

find 语法:

  iterator find( const KEY_TYPE &amp;key );
登录后复制

find()函数返回一个迭代器指向键值为key的元素,如果没找到就返回指向map尾部的迭代器。

get_allocator 语法:

  allocator_type get_allocator();
登录后复制

get_allocator()函数返回map的配置器。

insert 语法:

  iterator insert( iterator pos, const pair<key_type> &amp;val );
  void insert( input_iterator start, input_iterator end );
  pair<iterator> insert( const pair<key_type> &amp;val );</key_type></iterator></key_type>
登录后复制

insert()函数:
插入val到pos的后面,然后返回一个指向这个元素的迭代器。
插入start到end的元素到map中。
只有在val不存在时插入val。返回值是一个指向被插入元素的迭代器和一个描述是否插入的bool值。

key_comp 语法:

  key_compare key_comp();
登录后复制

key_comp()函数返回一个比较key的函数。

lower_bound 语法:

  iterator lower_bound( const KEY_TYPE &amp;key );
登录后复制

lower_bound()函数返回一个迭代器,指向map中键值>=key的第一个元素。

max_size 语法:

  size_type max_size();
登录后复制

max_size()函数返回map能够保存的最大元素个数。

rbegin 语法:

  reverse_iterator rbegin();
登录后复制

rbegin()函数返回一个指向map尾部的逆向迭代器。

rend 语法:

  reverse_iterator rend();
登录后复制

rend()函数返回一个指向map头部的逆向迭代器。

size 语法:

  size_type size();
登录后复制

size()函数返回map中保存的元素个数。

swap 语法:

  void swap( map &amp;obj );
登录后复制

swap()交换obj和现map中的元素。

upper_bound 语法:

  iterator upper_bound( const KEY_TYPE &amp;key );
登录后复制

upper_bound()函数返回一个迭代器,指向map中键值>key的第一个元素。

value_comp 语法:

  value_compare value_comp();
登录后复制

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

map集合的一些简单的使用

#include<iostream>
#include<map>
#include<string>
using namespace::std;
/* *
 *map集合的简单使用
 *
 * */



class Compare{
  public:
    bool operator()(int a,int b){
      return a &gt; b;
    }

};

int main(int argc,char* argv[]){
  //定义一个map的对象
  map<int> num_convert_map;
  map<int>::iterator m_iter;

  //采用pair来进行键值对的添加
  num_convert_map.insert(pair<int>(1,"one"));
  //通过map集合内部的value_type来进行插入键值对
  num_convert_map.insert(map<int>::value_type(2,"two"));
  //通过make_pair来进行键值对的插入
  num_convert_map.insert(make_pair(3,"three"));

  //map重载了[],[键] = "值"
  num_convert_map[0] = "zero";


  //输出map中的元素
  for(m_iter =num_convert_map.begin();m_iter != num_convert_map.end() ;m_iter++){
    //第一个元素iter-&gt;first  第二个元素 iter-&gt;second
    cout first  second  string_map;
  string_map.insert(pair<string>("张三","初中"));
  string_map["李四"] = "高中";
  //由此重写后的map对象的[]运算符是支持泛型的
  cout  num_convert_map2(num_convert_map.begin(),num_convert_map.end());
  num_convert_map2.insert(pair<int>(5,"张三"));  
  num_convert_map2.insert(pair<int>(3,"李四"));  
  num_convert_map2.insert(pair<int>(1,"赵柳"));  
  coutfirst second<p>感谢大家的阅读,希望大家收益多多。</p>
<p>本文转自:  https://blog.csdn.net/qq_29924041/article/details/74080102  </p>
<p>推荐教程:《<a href="//m.sbmmt.com/csharp-article.html" target="_blank">C语言</a>》                               </p></int></int></int></string></int></int></int></int></string></map></iostream>
登录后复制

以上就是带你详细了解C++中的map(键值对)和set(集合)的详细内容,更多请关注php中文网其它相关文章!

智能AI问答
PHP中文网智能助手能迅速回答你的编程问题,提供实时的代码和解决方案,帮助你解决各种难题。不仅如此,它还能提供编程资源和学习指导,帮助你快速提升编程技能。无论你是初学者还是专业人士,AI智能助手都能成为你的可靠助手,助力你在编程领域取得更大的成就。
来源:CSDN网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
关于CSS思维导图的课件在哪? 课件
凡人来自于2024-04-16 10:10:18
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2024 //m.sbmmt.com/ All Rights Reserved | php.cn | 湘ICP备2023035733号