c++ 中 map 提供的是一種鍵值對容器,裡面的資料都是成對出現的,如下圖:每一對中的第乙個值稱之為關鍵字(key),每個關鍵字只能在 map **現一次;第二個稱之為該關鍵字的對應值。在一些程式中建立乙個 map 可以起到事半功倍的效果,本文為大家總結了 map 的一些基本簡單的操作!
map的使用
需要匯入標頭檔案#include // stl標頭檔案沒有副檔名.h
map 物件是乙個模版類,需要關鍵字和儲存物件兩個模版引數std::map person;
可以對模版進行型別定義使其使用方便typedef std::map map_ini_string;
map_ini_string person;
map 的構造
1、map 最基本的建構函式;
2、map 新增資料;
3、map 資料的遍歷
三種最常用的遍歷方法:
1)前向迭代器std::map < int ,std::string > ::iterator it;
std::map < int ,std::string > ::iterator itend;
while (it != itend) {
coutit++;
2)反向迭代器std::map < int, string > ::reverse_iterator iter;
for(int n = 1; n <= nsize; n++)
qdebug()<<:fromstdstring>
三種都是遍歷,建議使用前向迭代器,慎用使用陣列形成(角標開始位置謹慎)。
4、map 中元素的查詢:
find() 函式返回乙個迭代器指向鍵值為 key 的元素,如果沒找到就返回指向 map 尾部的迭代器。map ::iterator l_it;;
l_it = maplive.find(112);
if(l_it == maplive.end())
cout<
else cout<
5、map 中元素的刪除:
如果刪除 112;iterator erase(iterator it);//通過乙個條目物件刪除
iterator erase(iterator first,iterator last);//刪除乙個範圍
size_type erase(const key&key);//通過關鍵字刪除
clear();//就相當於enummap.erase(enummap.begin(),enummap.end());
6、map 中 swap 的用法:
map 中的 swap 不是乙個容器中的元素交換,而是兩個容器交換;
示例:#include
#include
using namespace std;
int main( )
map < int, int > m1, m2, m3;
map < int, int >::iterator m1_iter;
m1.insert ( pair < int, int > ( 1, 10 ) );
m1.insert ( pair < int, int > ( 2, 20 ) );
m1.insert ( pair < int, int > ( 3, 30 ) );
m2.insert ( pair < int, int > ( 10, 100 ) );
m2.insert ( pair < int, int > ( 20, 200 ) );
m3.insert ( pair < int, int > ( 30, 300 ) );
cout << "the original map m1 is:";
for ( m1_iter = m1.begin( ); m1_iter != m1.end( ); m1_iter++ )
cout << " " << m1_iter->second;
cout << "." << endl;
// this is the member function version of swap
//m2 is said to be the argument map; m1 the target map
m1.swap( m2 );
for ( m1_iter = m1.begin( ); m1_iter != m1.end( ); m1_iter++ )
cout << " " << m1_iter -> second;
cout << "." << endl;
for ( m1_iter = m2.begin( ); m1_iter != m2.end( ); m1_iter++ )
cout << " " << m1_iter -> second;
cout << "." << endl;
// this is the specialized template version of swap
swap( m1, m3 );
for ( m1_iter = m1.begin( ); m1_iter != m1.end( ); m1_iter++ )
cout << " " << m1_iter -> second;
cout << "." << endl;
7、map 的 sort 問題:
map 中的元素是自動按 key 公升序排序,所以不能對 map 用 sort 函式:
示例:#include #include
using namespace std;
int main( )
map < int, int > m1;
map < int, int >::iterator m1_iter;
m1.insert ( pair < int, int > ( 1, 20 ) );
m1.insert ( pair < int, int > ( 4, 40 ) );
m1.insert ( pair < int, int > ( 3, 60 ) );
m1.insert ( pair < int, int > ( 2, 50 ) );
m1.insert ( pair < int, int > ( 6, 40 ) );
m1.insert ( pair < int, int > ( 7, 30 ) );
cout << "the original map m1 is:"<
for ( m1_iter = m1.begin( ); m1_iter != m1.end( ); m1_iter++ )
cout << m1_iter->first8、map 的基本操作函式:
c++ maps 是一種關聯式容器,包含「關鍵字/值」對
begin() 返回指向 map 頭部的迭代器
clear() 刪除所有元素
begin() 返回指向 map 頭部的迭代器
clear() 刪除所有元素
count() 返回指定元素出現的次數
empty() 如果 map 為空則返回 true
end() 返回指向 map 末尾的迭代器
equal_range() 返回特殊條目的迭代器對
erase() 刪除乙個元素
find() 查詢乙個元素
get_allocator() 返回map的配置器
insert() 插入元素
key_comp() 返回比較元素key的函式
lower_bound() 返回鍵值》=給定元素的第乙個位置
max_size() 返回可以容納的最大元素個數
rbegin() 返回乙個指向map尾部的逆向迭代器
rend() 返回乙個指向map頭部的逆向迭代器
size() 返回map中元素的個數
swap() 交換兩個map
upper_bound() 返回鍵值》給定元素的第乙個位置
value_comp() 返回比較元素value的函式
C 標頭檔案系列 map
該標頭檔案包含兩個概念相似的容器 map multimap。而這兩個容器反映的概念就是對映。這兩個容器相同的屬性有 這兩個不相同的屬性是 既然說到關聯性容器,自然得說說標準庫的容器類別。c 庫容器主要能分成以下幾類 序列性容器 將儲存物件組織成線性模型,使使用者能夠像線性陣列那樣訪問。亂序容器 儲存...
標頭檔案的使用
標頭檔案的使用 把函式原型和常量定義放在乙個標頭檔案中是乙個很好的程式設計習慣。例子 假設需要管理4個連鎖的旅館。對於預定住宿時間超過一天的人來說,第1天的收費是第1天的95 而第3天的收費則是第2天的95 等待。編寫乙個程式,對於指定的旅館和住宿天數可以計算出收費總額。同時程式中要實現乙個選單,從...
標頭檔案的使用
當幾個類在不同檔案定義的時候,該怎樣使用定義好的類?開始的時候,我是把每個類的定義和實現放在不同的檔案,然後在使用該類的地方直接使用的,結果是可想而知的,很 多錯誤。後來就問同事,同事說要把類的宣告放在乙個頭文 件中,然後再在類檔案中實現它。在使用的時候,要引用該 標頭檔案。我作了個demo,如下 ...