Heim  >  Artikel  >  Backend-Entwicklung  >  Erfahren Sie mehr über Map (Schlüssel-Wert-Paare) und Set (Sammlung) in C++

Erfahren Sie mehr über Map (Schlüssel-Wert-Paare) und Set (Sammlung) in C++

烟雨青岚
烟雨青岚nach vorne
2020-07-06 13:48:513754Durchsuche

Erfahren Sie mehr über Map (Schlüssel-Wert-Paare) und Set (Sammlung) in C++

C++-Lernen: Kartensammlung (Schlüssel-Wert-Paar)

Set und Karte gehören zur internen Implementierung von Die Containerklasse mit nichtlinearer Struktur

ist ein ausgeglichener Binärbaum

map ist ein Korrelationscontainer von STL, der Eins-zu-Eins-Datenverarbeitungsfunktionen bietet

Das erste kann als Schlüsselwort bezeichnet werden, und jedes Schlüsselwort kann nur erscheint einmal in der Karte
Der zweite Wert wird als Schlüsselwort bezeichnet

###set set

begin Syntax:

iterator begin();

Gibt einen Iterator zurück, der auf das erste Element in der aktuellen Sammlung zeigt.

clear Syntax:

void clear();

Alle Elemente in der aktuellen Sammlung löschen.

count Syntax:

size_type count( const key_type &key );

Gibt die Anzahl der Elemente mit einem bestimmten Wert zurück, die in der aktuellen Sammlung erscheinen.

empty Syntax:

bool empty();

Wenn die aktuelle Sammlung leer ist, geben Sie true zurück, andernfalls geben Sie false zurück.

end Syntax:

const_iterator end();

Gibt einen Iterator zurück, der auf das letzte Element in der aktuellen Sammlung zeigt.

equal_range Syntax:

pair equal_range( const key_type &key );

Gibt zwei Iteratoren in der Sammlung zurück, wobei die Ober- und Untergrenzen dem angegebenen Wert entsprechen.

erase Syntax:

void erase( iterator i ); 
void erase( iterator start, iterator end ); 
size_type erase( const key_type &key );

Beschreibung:
● Elemente von Anfang bis Ende löschen; Elemente gleich dem Schlüsselwert (gibt die Anzahl der gelöschten Elemente zurück).

Suchsyntax:

iterator find( const key_type &key );
Suchen Sie das Element, das dem Schlüsselwert in der aktuellen Sammlung entspricht, und geben Sie den Iterator zurück, der auf das Element zeigt, geben Sie das letzte zurück Punkt in der Sammlung Ein Iterator von Elementen.

get_allocator Syntax:

allocator_type get_allocator();

Gibt den Allocator der aktuellen Sammlung zurück.

insert Syntax:

iterator insert( iterator i, const TYPE &val ); 
void insert( input_iterator start, input_iterator end ); 
pair insert( const TYPE &val );
Beschreibung:

● Füge val vor Iterator i ein;

● Gib den Iterator von Anfang bis Ende zurück. Das Element wird eingefügt in die Sammlung;
● Fügt das val-Element in die aktuelle Sammlung ein und gibt einen Iterator zurück, der auf das Element zeigt, sowie einen booleschen Wert, der angibt, ob val erfolgreich eingefügt wurde.
(Es ist zu beachten, dass zwei identische Elemente nicht in Mengen (Sets) eingefügt werden können.)

lower_bound Syntax:

iterator lower_bound( const key_type &key );
Gibt einen Zeiger zurück, der größer ist als oder Ein Iterator, der dem ersten Element des Schlüsselwerts entspricht.

key_comp Syntax:

key_compare key_comp();
Gibt ein Funktionsobjekt zurück, das für den Wertevergleich zwischen Elementen verwendet wird.

max_size Syntax:

size_type max_size();
Gibt die maximale Grenze der Elemente zurück, die die aktuelle Sammlung enthalten kann.

rbegin Syntax:

reverse_iterator rbegin();
Gibt einen umgekehrten Iterator zurück, der auf das letzte Element in der aktuellen Sammlung zeigt.

rend-Syntax:

reverse_iterator rend();
Gibt einen umgekehrten Iterator zurück, der auf das erste Element in der Sammlung zeigt.

size Syntax:

size_type size();
Gibt die Anzahl der Elemente in der aktuellen Sammlung zurück.

swap Syntax:

void swap( set &object );
Elemente in der aktuellen Sammlung und Objektsammlung austauschen.

upper_bound Syntax:

iterator upper_bound( const key_type &key );
Gibt einen Iterator zurück, der auf Elemente zeigt, die größer als der Schlüsselwert in der aktuellen Sammlung sind.

value_comp Syntax:

value_compare value_comp();
Gibt ein Funktionsobjekt zurück, das zum Vergleichen von Werten zwischen Elementen verwendet wird

Einfacher Beispielcode:

/*
 * ===========================================================================
 *
 *       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;
}

###Verwendung von Map-Schlüssel-Wert-Paaren

C++-MapsC++-Maps werden zum Speichern von „Schlüsselwort/Wert“-Paaren verwendet

begin Syntax:

  iterator begin();
begin()-Funktion gibt einen Iterator zurück, der auf das erste Element der Karte zeigt.

clear Syntax:

void clear();
Die Funktion clear() löscht alle Elemente in der Karte.

count Syntax:

  size_type count( const KEY_TYPE &key );
count()-Funktion gibt die Anzahl der Elemente in der Karte zurück, deren Schlüsselwert gleich dem Schlüssel ist.

empty Syntax:

  bool empty();
empty()-Funktion gibt true zurück, wenn die Karte leer ist, andernfalls gibt sie false zurück.

end Syntax:

  iterator end();
end()-Funktion gibt einen Iterator zurück, der auf das Ende der Karte zeigt.

equal_range Syntax:

  pair equal_range( const KEY_TYPE &key );
equal_range() Funktion gibt zwei Iteratoren zurück – einer zeigt auf das erste Element mit Schlüsselwert und der andere zeigt auf das letzte Element, dessen Schlüsselwert ist Schlüssel.

Erase-Syntax:

  void erase( iterator pos );
  void erase( iterator start, iterator end );
  size_type erase( const KEY_TYPE &key );
Die Funktion erase() löscht das Element an der Pos-Position oder löscht das Element zwischen Anfang und Ende oder löscht diejenigen, deren Wert der Schlüssel ist alle Elemente.

find Syntax:

  iterator find( const KEY_TYPE &key );
Die Funktion find() gibt einen Iterator zurück, der auf das Element mit dem Schlüsselwert zeigt. Wenn es nicht gefunden wird, gibt sie einen Iterator zurück, der auf das Element zeigt bis zum Ende der Karte.

get_allocator Syntax:

  allocator_type get_allocator();
Die Funktion get_allocator() gibt den Konfigurator der Karte zurück.

Syntax einfügen:

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

Funktion insert():

Val nach pos einfügen und dann einen Zeiger auf diesen Elementiterator zurückgeben . Fügen Sie Elemente von Anfang bis Ende in die Karte ein.
Fügen Sie val nur ein, wenn val nicht existiert. Der Rückgabewert ist ein Iterator, der auf das eingefügte Element zeigt, und ein Bool-Wert, der beschreibt, ob es eingefügt wurde.

key_comp Syntax:

  key_compare key_comp();
key_comp() Funktion gibt eine Funktion zurück, die Schlüssel vergleicht.

Syntax für untere_Grenze:

  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语言》                               

Das obige ist der detaillierte Inhalt vonErfahren Sie mehr über Map (Schlüssel-Wert-Paare) und Set (Sammlung) in C++. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen