您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關(guān)C++中的map和set是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
C++學(xué)習(xí):map集合(鍵值對(duì))
集合(set)與映射(map)屬于非線性結(jié)構(gòu)容器類
內(nèi)部實(shí)現(xiàn)上面是平衡二叉樹(shù)
map是STL的一個(gè)關(guān)聯(lián)性容器,它提供一對(duì)一的數(shù)據(jù)處理能力
其中第一個(gè)可以稱為關(guān)鍵字,每個(gè)關(guān)鍵字只能在map中出現(xiàn)一次
第二個(gè)稱為該關(guān)鍵字的值
###set集合
begin 語(yǔ)法:
iterator begin();
返回指向當(dāng)前集合中第一個(gè)元素的迭代器。
clear 語(yǔ)法:
void clear();
清除當(dāng)前集合中的所有元素。
count 語(yǔ)法:
size_type count( const key_type &key );
返回當(dāng)前集合中出現(xiàn)的某個(gè)值的元素的數(shù)目。
empty 語(yǔ)法:
bool empty();
如果當(dāng)前集合為空,返回true;否則返回false。
end 語(yǔ)法:
const_iterator end();
返回指向當(dāng)前集合中最后一個(gè)元素的迭代器。
equal_range 語(yǔ)法:
pair equal_range( const key_type &key );
返回集合中與給定值相等的上下限的兩個(gè)迭代器。
erase 語(yǔ)法:
void erase( iterator i ); void erase( iterator start, iterator end ); size_type erase( const key_type &key );
說(shuō)明:
● 刪除i元素;
● 刪除從start開(kāi)始到end結(jié)束的元素;
● 刪除等于key值的所有元素(返回被刪除的元素的個(gè)數(shù))。
find 語(yǔ)法:
iterator find( const key_type &key );
在當(dāng)前集合中查找等于key值的元素,并返回指向該元素的迭代器;如果沒(méi)有找到,返回指向集合最后一個(gè)元素的迭代器。
get_allocator 語(yǔ)法:
allocator_type get_allocator();
返回當(dāng)前集合的分配器。
insert 語(yǔ)法:
iterator insert( iterator i, const TYPE &val ); void insert( input_iterator start, input_iterator end ); pair insert( const TYPE &val );
說(shuō)明:
● 在迭代器i前插入val;
● 將迭代器start開(kāi)始到end結(jié)束返回內(nèi)的元素插入到集合中;
● 在當(dāng)前集合中插入val元素,并返回指向該元素的迭代器和一個(gè)布爾值來(lái)說(shuō)明val是否成功的被插入了。
(應(yīng)該注意的是在集合(Sets)中不能插入兩個(gè)相同的元素。)
lower_bound 語(yǔ)法:
iterator lower_bound( const key_type &key );
返回一個(gè)指向大于或者等于key值的第一個(gè)元素的迭代器。
key_comp 語(yǔ)法:
key_compare key_comp();
返回一個(gè)用于元素間值比較的函數(shù)對(duì)象。
max_size 語(yǔ)法:
size_type max_size();
返回當(dāng)前集合能容納元素的最大限值。
rbegin 語(yǔ)法:
reverse_iterator rbegin();
返回指向當(dāng)前集合中最后一個(gè)元素的反向迭代器。
rend 語(yǔ)法:
reverse_iterator rend();
返回指向集合中第一個(gè)元素的反向迭代器。
size 語(yǔ)法:
size_type size();
返回當(dāng)前集合中元素的數(shù)目。
swap 語(yǔ)法:
void swap( set &object );
交換當(dāng)前集合和object集合中的元素。
upper_bound 語(yǔ)法:
iterator upper_bound( const key_type &key );
在當(dāng)前集合中返回一個(gè)指向大于Key值的元素的迭代器。
value_comp 語(yǔ)法:
value_compare value_comp();
返回一個(gè)用于比較元素間的值的函數(shù)對(duì)象
簡(jiǎn)單的示例代碼:
/* * =========================================================================== * * Filename: setTest.cpp * Description: * Version: 1.0 * Created: 2017年07月01日 22時(shí)20分58秒 * Revision: none * Compiler: gcc * Author: (), * Company: * * =========================================================================== */ #include<iostream> #include<set> using namespace::std; void showSet(const set<int> i_set){ //通過(guò)迭代器的形式輸出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; //通過(guò)反向迭代器輸出 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的常用幾種構(gòu)造函數(shù) int array[6] = {11,3,25,7,9,6}; //第一種構(gòu)造函數(shù) set<int> first_set; //第二種構(gòu)造函數(shù) set<int> second_set(array,array+6); showSet(second_set); //第三種構(gòu)造函數(shù) set<int> third_set(second_set.begin(),second_set.end()); showSet(third_set); //set的插入insert函數(shù) first_set.insert(3); first_set.insert(6); first_set.insert(5); first_set.insert(5); showSet(first_set); //返回當(dāng)前集合中出現(xiàn)某個(gè)值的數(shù)量count int count = first_set.count(5); cout<< "the count:"<< count << endl; //返回當(dāng)前集合是否是null的 empty函數(shù) bool setIsEmpty = first_set.empty(); cout << "the set empty type:"<<setIsEmpty <<endl; //刪除某個(gè)元素 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); //通過(guò)find函數(shù)來(lái)尋找集合中的元素 set<int>::iterator iter; iter = first_set.find(3); first_set.erase(iter); showSet(first_set); first_set.clear(); return 0; }
###map鍵值對(duì)的使用
C++ Maps
C++ Maps 被用作儲(chǔ)存“關(guān)鍵字/值”對(duì)
begin 語(yǔ)法:
iterator begin();
begin()函數(shù)返回一個(gè)迭代器指向map的第一個(gè)元素。
clear 語(yǔ)法:
void clear();
clear()函數(shù)刪除map中的所有元素。
count 語(yǔ)法:
size_type count( const KEY_TYPE &key );
count()函數(shù)返回map中鍵值等于key的元素的個(gè)數(shù)。
empty 語(yǔ)法:
bool empty();
empty()函數(shù)返回真(true)如果map為空,否則返回假(false)。
end 語(yǔ)法:
iterator end();
end()函數(shù)返回一個(gè)迭代器指向map的尾部。
equal_range Syntax:
pair equal_range( const KEY_TYPE &key );
equal_range()函數(shù)返回兩個(gè)迭代器——一個(gè)指向第一個(gè)鍵值為key的元素,另一個(gè)指向最后一個(gè)鍵值為key的元素。
erase 語(yǔ)法:
void erase( iterator pos ); void erase( iterator start, iterator end ); size_type erase( const KEY_TYPE &key );
erase()函數(shù)刪除在pos位置的元素,或者刪除在start和end之間的元素,或者刪除那些值為key的所有元素。
find 語(yǔ)法:
iterator find( const KEY_TYPE &key );
find()函數(shù)返回一個(gè)迭代器指向鍵值為key的元素,如果沒(méi)找到就返回指向map尾部的迭代器。
get_allocator 語(yǔ)法:
allocator_type get_allocator();
get_allocator()函數(shù)返回map的配置器。
insert 語(yǔ)法:
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()函數(shù):
插入val到pos的后面,然后返回一個(gè)指向這個(gè)元素的迭代器。
插入start到end的元素到map中。
只有在val不存在時(shí)插入val。返回值是一個(gè)指向被插入元素的迭代器和一個(gè)描述是否插入的bool值。
key_comp 語(yǔ)法:
key_compare key_comp();
key_comp()函數(shù)返回一個(gè)比較key的函數(shù)。
lower_bound 語(yǔ)法:
iterator lower_bound( const KEY_TYPE &key );
lower_bound()函數(shù)返回一個(gè)迭代器,指向map中鍵值>=key的第一個(gè)元素。
max_size 語(yǔ)法:
size_type max_size();
max_size()函數(shù)返回map能夠保存的最大元素個(gè)數(shù)。
rbegin 語(yǔ)法:
reverse_iterator rbegin();
rbegin()函數(shù)返回一個(gè)指向map尾部的逆向迭代器。
rend 語(yǔ)法:
reverse_iterator rend();
rend()函數(shù)返回一個(gè)指向map頭部的逆向迭代器。
size 語(yǔ)法:
size_type size();
size()函數(shù)返回map中保存的元素個(gè)數(shù)。
swap 語(yǔ)法:
void swap( map &obj );
swap()交換obj和現(xiàn)map中的元素。
upper_bound 語(yǔ)法:
iterator upper_bound( const KEY_TYPE &key );
upper_bound()函數(shù)返回一個(gè)迭代器,指向map中鍵值>key的第一個(gè)元素。
value_comp 語(yǔ)法:
value_compare value_comp();
value_comp()函數(shù)返回一個(gè)比較元素value的函數(shù)。
map集合的一些簡(jiǎn)單的使用
#include<iostream> #include<map> #include<string> using namespace::std; /* * *map集合的簡(jiǎn)單使用 * * */ class Compare{ public: bool operator()(int a,int b){ return a > b; } }; int main(int argc,char* argv[]){ //定義一個(gè)map的對(duì)象 map<int,string> num_convert_map; map<int,string>::iterator m_iter; //采用pair來(lái)進(jìn)行鍵值對(duì)的添加 num_convert_map.insert(pair<int,string>(1,"one")); //通過(guò)map集合內(nèi)部的value_type來(lái)進(jìn)行插入鍵值對(duì) num_convert_map.insert(map<int,string>::value_type(2,"two")); //通過(guò)make_pair來(lái)進(jìn)行鍵值對(duì)的插入 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++){ //第一個(gè)元素iter->first 第二個(gè)元素 iter->second cout << m_iter->first <<":"<< m_iter -> second << endl; } //通過(guò)鍵來(lái)查詢值 cout<<num_convert_map[3]<<endl; map<string,string> string_map; string_map.insert(pair<string,string>("張三","初中")); string_map["李四"] = "高中"; //由此重寫(xiě)后的map對(duì)象的[]運(yùn)算符是支持泛型的 cout << string_map["張三"]<<endl; //輸出map的大小 cout<< "map size:" << num_convert_map.size() <<endl; //通過(guò)Compare將map排序,通過(guò)賦值拷貝的構(gòu)造函數(shù) 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; }
看完上述內(nèi)容,你們對(duì)C++中的map和set是什么有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。