ホームページ > バックエンド開発 > C#.Net チュートリアル > C++ のマップ (キーと値のペア) とセット (コレクション) について詳しく学びます。

C++ のマップ (キーと値のペア) とセット (コレクション) について詳しく学びます。

烟雨青岚
リリース: 2020-07-06 13:56:05
転載
3804 人が閲覧しました

C++ のマップ (キーと値のペア) とセット (コレクション) について詳しく学びます。

C 学習: マップ セット (キーと値のペア)

セット (セット) とマップ (マップ)非線形構造コンテナ クラスに属します

内部実装はバランスの取れたバイナリ ツリーです

map は STL の相関コンテナであり、1 対 1 のデータ処理機能を提供します。

最初のキーワードはキーワードと呼ばれ、各キーワードはマップ内に 1 回出現します
2 番目はキーワードの値と呼ばれます

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 );
ログイン後にコピー
指定された値と等しいコレクション内の上限と下限を持つ 2 つのイテレータを返します。

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 );
ログイン後にコピー

説明:
# Insert val before iterator i;
# 先頭から末尾までの反復子を返します。要素が挿入されます。 into the collection;
# 現在のコレクションに val 要素を挿入し、要素を指すイテレータと、val が正常に挿入されたかどうかを示すブール値を返します。 (2 つの同一の要素をセット (Set) に挿入することはできないことに注意してください。)

lower_bound 構文:

iterator lower_bound( const key_type &key );
ログイン後にコピー
より大きいポインターを返します。 than または キー値の最初の要素と等しい反復子。

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 マップC マップは、「キーワード/値」のペアを保存するために使用されます

begin 構文:

  iterator begin();
ログイン後にコピー

begin() 関数は、マップの最初の要素を指す反復子を返します。

clear 構文:

void clear();
ログイン後にコピー
ログイン後にコピー

clear() 関数は、マップ内のすべての要素を削除します。

count 構文:

  size_type count( const KEY_TYPE &key );
ログイン後にコピー

count() 関数は、キー値が key と等しいマップ内の要素の数を返します。

empty 構文:

  bool empty();
ログイン後にコピー

empty() 関数は、マップが空の場合は true (true) を返し、それ以外の場合は false (false) を返します。

end 構文:

  iterator end();
ログイン後にコピー

end() 関数は、マップの末尾を指す反復子を返します。

equal_range 構文:

  pair equal_range( const KEY_TYPE &key );
ログイン後にコピー

equal_range() 関数は 2 つの反復子を返します。1 つはキー値 key を持つ最初の要素を指し、もう 1 つは最後の要素を指します。キー値が key である要素。

erase 構文:

  void erase( iterator pos );
  void erase( iterator start, iterator end );
  size_type erase( const KEY_TYPE &key );
ログイン後にコピー

erase() 関数は、pos 位置の要素を削除するか、開始と終了の間の要素を削除するか、値がキーである要素を削除します。すべての要素。

find 構文:

  iterator find( const KEY_TYPE &key );
ログイン後にコピー

find() 関数は、キー値 key を持つ要素を指す反復子を返します。見つからない場合は、反復子を返します。地図の端を指しています。

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 を挿入します。戻り値は、挿入された要素を指すイテレータと、それが挿入されたかどうかを示すブール値です。

key_comp 構文:

  key_compare key_comp();
ログイン後にコピー

key_comp() 関数は、キーを比較する関数を返します。

下限構文:######
  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++ のマップ (キーと値のペア) とセット (コレクション) について詳しく学びます。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:csdn.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート