>  기사  >  백엔드 개발  >  C++의 map(키-값 쌍) 및 set(컬렉션)에 대해 자세히 알아보세요.

C++의 map(키-값 쌍) 및 set(컬렉션)에 대해 자세히 알아보세요.

烟雨青岚
烟雨青岚앞으로
2020-07-06 13:48:513757검색

C++의 map(키-값 쌍) 및 set(컬렉션)에 대해 자세히 알아보세요.

C++ 학습: 맵 세트(키-값 쌍)

세트와 맵(맵)은 비선형 구조 컨테이너 클래스에 속합니다

내부 구현은 균형 이진 트리입니다

map은 일대일 데이터 처리 기능을 제공하는 STL의 연관 컨테이너입니다

첫 번째는 키워드라고 할 수 있으며 각 키워드는 맵에 한 번만 나타날 수 있습니다
두 번째는 Is라고 합니다. 이 키워드의 값

###set 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 요소를 삭제합니다.
● 처음부터 끝까지 요소를 삭제합니다.
● 키 값과 동일한 모든 요소를 ​​삭제합니다(삭제된 요소 수 반환).

find 구문:

iterator find( const key_type &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을 삽입합니다.
● 반복자 시작부터 끝까지 반환된 요소를 컬렉션에 삽입합니다.
● val 요소를 현재 컬렉션에 삽입하고 반복자를 반환합니다. 요소를 가리키고 val이 성공적으로 삽입되었는지 여부를 나타내는 부울 값입니다.
(두 개의 동일한 요소를 집합(Sets)에 삽입할 수 없다는 점에 유의해야 합니다.)

lower_bound 구문:

iterator lower_bound( const key_type &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 );

현재 컬렉션과 개체 컬렉션의 요소를 교환합니다.

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<<"===========the show start==========="<<endl;
  set<int>::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(set<int> r_set){
  cout<<"==========the show reverse set start============="<<endl;
  //通过反向迭代器输出
  set<int>::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};
  //第一种构造函数
  set<int> 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<< "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函数来寻找集合中的元素
  set<int>::iterator iter;
  iter = first_set.find(3);
  first_set.erase(iter);
  showSet(first_set);

  first_set.clear();
  return 0;
}

###맵 키-값 쌍 사용
C++ Maps
C++ Maps "키워드/값" 쌍을 저장하는 데 사용됩니다.

begin 구문:

  iterator begin();

begin() 함수는 지도의 첫 번째 요소를 가리키는 반복자를 반환합니다.

clear 구문:

void clear();

clear() 함수는 지도의 모든 요소를 ​​삭제합니다.

count 구문:

  size_type count( const KEY_TYPE &key );

count() 함수는 키 값이 키와 동일한 맵의 요소 수를 반환합니다.

empty 구문:

  bool empty();

empty() 함수는 맵이 비어 있으면 true를 반환하고, 그렇지 않으면 false를 반환합니다.

end 구문:

  iterator end();

end() 함수는 지도의 끝을 가리키는 반복자를 반환합니다.

equal_range 구문:

  pair equal_range( const KEY_TYPE &key );

equal_range() 함수는 두 개의 반복자를 반환합니다. 하나는 키 값이 키인 첫 번째 요소를 가리키고 다른 하나는 키 값이 키인 마지막 요소를 가리킵니다.

erase 구문:

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

erase() 함수는 pos 위치의 요소를 삭제하거나, 시작과 끝 사이의 요소를 삭제하거나, 값이 key인 모든 요소를 ​​삭제합니다.

find 구문:

  iterator find( const KEY_TYPE &key );

find() 함수는 키 값이 있는 요소를 가리키는 반복자를 반환합니다. 찾을 수 없으면 맵의 끝을 가리키는 반복자를 반환합니다.

get_allocator 구문:

  allocator_type get_allocator();

get_allocator() 함수는 지도의 구성자를 반환합니다.

insert 구문:

  iterator insert( iterator pos, const pair<KEY_TYPE,VALUE_TYPE> &val );
  void insert( input_iterator start, input_iterator end );
  pair<iterator, bool> insert( const pair<KEY_TYPE,VALUE_TYPE> &val );

insert() 함수:
pos 뒤에 val을 삽입하고 이 요소를 가리키는 반복자를 반환합니다.
지도의 처음부터 끝까지 요소를 삽입하세요.
val이 존재하지 않는 경우에만 val을 삽입하세요. 반환 값은 삽입된 요소를 가리키는 반복자와 삽입 여부를 설명하는 bool 값입니다.

key_comp 구문:

  key_compare key_comp();

key_comp() 함수는 키를 비교하는 함수를 반환합니다.

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集合的一些简单的使用

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



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

};

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

  //采用pair来进行键值对的添加
  num_convert_map.insert(pair<int,string>(1,"one"));
  //通过map集合内部的value_type来进行插入键值对
  num_convert_map.insert(map<int,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;
  }

  //通过键来查询值
  cout<<num_convert_map[3]<<endl;
  
  map<string,string> string_map;
  string_map.insert(pair<string,string>("张三","初中"));
  string_map["李四"] = "高中";
  //由此重写后的map对象的[]运算符是支持泛型的
  cout << string_map["张三"]<<endl;
  

  //输出map的大小
  cout<< "map size:" << num_convert_map.size() <<endl;
  
  //通过Compare将map排序,通过赋值拷贝的构造函数
  map<int,string,Compare> num_convert_map2(num_convert_map.begin(),num_convert_map.end());
  num_convert_map2.insert(pair<int,string>(5,"张三"));  
  num_convert_map2.insert(pair<int,string>(3,"李四"));  
  num_convert_map2.insert(pair<int,string>(1,"赵柳"));  
  cout<< "-------------"<<endl;
  for(m_iter = num_convert_map2.begin();m_iter != num_convert_map2.end();m_iter++){
    cout<<m_iter->first <<";"<<m_iter->second<<endl;
  }

  return 0;
}

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

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

推荐教程:《C语言》                               

위 내용은 C++의 map(키-값 쌍) 및 set(컬렉션)에 대해 자세히 알아보세요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제