首页后端开发ASP.NET带你详细了解C++中的map(键值对)和set(集合)

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

时间2024-01-31 21:59:03发布访客分类ASP.NET浏览202
导读:收集整理的这篇文章主要介绍了带你详细了解C++中的map(键值对 和set(集合 ,觉得挺不错的,现在分享给大家,也给大家做个参考。C++学习:map集合(键值对 集合(set 与映射(map 属于非线性结构容器类内部实现上面是平衡二叉树...
收集整理的这篇文章主要介绍了带你详细了解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:   * * =========================================================================== */#includeiostream>
    #includeset>
    using namespace::std;
    void showSet(const setint>
 i_set){
      //通过迭代器的形式输出set集合  cout"===========the show start==========="endl;
      setint>
    ::const_iterator c_iter;
      for(c_iter = i_set.begin();
     c_iter !=i_set.end();
c_iter++){
        cout "i_set:"*c_iter  endl;
  }
      cout"===========the show end============="endl;
}
    void showReverseSet(setint>
 r_set){
      cout"==========the show reverse set start============="endl;
      //通过反向迭代器输出  setint>
    ::reverse_iterator r_iter;
      for(r_iter = r_set.rbegin();
    r_iter!=r_set.rend();
r_iter++){
        cout "r_set:" *r_iter endl;
  }
      cout"==========the show reverse set end==============="endl;
}
int main(int argc,char *argv[]){
  //set的常用几种构造函数  int array[6] = {
11,3,25,7,9,6}
    ;
      //第一种构造函数  setint>
     First_set;
      //第二种构造函数  setint>
     second_set(array,array+6);
      showSet(second_set);
      //第三种构造函数  setint>
     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 "the count:" count  endl;
      //返回当前集合是否是null的  empty函数  bool setISEMpty = first_set.empty();
      cout  "the set empty type:"setIsEmpty endl;
      //删除某个元素  erase  first_set.erase(3);
      showSet(first_set);
      //set的大小  cout"the set Size:" first_set.size()  endl;
        showReverseSet(first_set);
      //交换集合中的元素  first_set.swap(second_set);
      showSet(first_set);
      showSet(second_set);
        //通过find函数来寻找集合中的元素  setint>
    ::iterator iter;
      iter = first_set.find(3);
      first_set.erase(iter);
      showSet(first_set);
      first_set.clear();
      return 0;
}
    

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

begin 语法:

  iterator begin();
    

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

clear 语法:

void clear();
    

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

count 语法:

  size_type count( const KEY_TYPE &
    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 &
    key );
    

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

erase 语法:

  void erase( iterator pos );
      void erase( iterator start, iterator end );
      size_type erase( const KEY_TYPE &
    key );
    

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

find 语法:

  iterator find( const KEY_TYPE &
    key );
    

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

get_allocator 语法:

  allocator_type get_allocator();
    

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

insert 语法:

  iterator insert( iterator pos, const pairKEY_TYPE,VALUE_TYPE>
     &
    val );
      void insert( input_iterator start, input_iterator end );
      pairiterator, bool>
     insert( const pairKEY_TYPE,VALUE_TYPE>
     &
    val );
    

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 &
    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 &
    obj );
    

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

upper_bound 语法:

  iterator upper_bound( const KEY_TYPE &
    key );
    

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

value_comp 语法:

  value_compare value_comp();
    

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

map集合的一些简单的使用

#includeiostream>
    #includemap>
    #includestring>
    using namespace::std;
/* * *map集合的简单使用 * * */class Compare{
  public:    bool operator()(int a,int b){
          return a >
     b;
    }
}
    ;
int main(int argc,char* argv[]){
      //定义一个map的对象  mapint,string>
     num_convert_map;
      mapint,string>
    ::iterator m_iter;
      //采用pair来进行键值对的添加  num_convert_map.insert(pairint,string>
    (1,"one"));
      //通过map集合内部的value_type来进行插入键值对  num_convert_map.insert(mapint,string>
    ::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->
    first  第二个元素 iter->
    second    cout  m_iter->
    first ":" m_iter ->
     second  endl;
  }
      //通过键来查询值  coutnum_convert_map[3]endl;
        mapstring,string>
     string_map;
      string_map.insert(pairstring,string>
    ("张三","初中"));
      string_map["李四"] = "高中";
      //由此重写后的map对象的[]运算符是支持泛型的  cout  string_map["张三"]endl;
        //输出map的大小  cout "map size:"  num_convert_map.size() endl;
        //通过Compare将map排序,通过赋值拷贝的构造函数  mapint,string,Compare>
     num_convert_map2(num_convert_map.begin(),num_convert_map.end());
      num_convert_map2.insert(pairint,string>
    (5,"张三"));
        num_convert_map2.insert(pairint,string>
    (3,"李四"));
        num_convert_map2.insert(pairint,string>
    (1,"赵柳"));
        cout "-------------"endl;
      for(m_iter = num_convert_map2.begin();
    m_iter != num_convert_map2.end();
m_iter++){
        coutm_iter->
    first ";
    "m_iter->
    secondendl;
  }
      return 0;
}
    

感谢大家的阅读,希望大家收益多多。

本文转自: https://blog.csdn.net/QQ_29924041/article/details/74080102

推荐教程:《c语言》

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

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

c++

若转载请注明出处: 带你详细了解C++中的map(键值对)和set(集合)
本文地址: https://pptw.com/jishu/594531.html
strcmp在c语言中是什么意思? c语言strcmp函数用法是什么?

游客 回复需填写必要信息