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 );
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 );
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; }
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 サイトの他の関連記事を参照してください。