マップの挿入と反復子
map.insert(…); //要素をコンテナーに挿入し、ペア<iterator、bool>を返します
4つの方法で挿入されたマップ要素:
と仮定マップ<整数、文字列> mapStu、
モード1、オブジェクトが対を介して挿入される
mapStu.insert(対<整数、文字列>ジョー・スミス」))、
モード2オブジェクト
mapStu.inset(make_pair(2、 "Li Si"))をペア
で挿入します;メソッド3、オブジェクトを挿入します
mapStu.insert(map <int、string> :: value_type(3、 "Wang Wu" by value_type ));
4
番目の方法では、配列mapStu [4] = "Zhao Liu";
mapStu [5] = "Little Seven"によって値を挿入します。
例:
#include <iostream>
#include <functional>
#include <algorithm>
#include <map>
#include <string>
using namespace std;
int main()
{
map<int, string> mapStu;
//方式一 构造一个pair, 然后插入
pair<map<int, string>::iterator, bool> ret = mapStu.insert(pair<int, string>(1, "张三"));
if(ret.second == true)
{
cout<<"插入成功! value: "<<(*(ret.first)).second<<endl;
}
else
{
cout<<"插入失败! "<<endl;
}
//如果键存在, 则插入会失败
ret = mapStu.insert(pair<int, string>(1, "小张三"));
if(ret.second == true)
{
cout<<"插入小张三成功! value: "<<(*(ret.first)).second<<endl;
}
else
{
cout<<"插入小张三失败!"<<endl;
}
//方式二 使用make_pair
mapStu.insert(make_pair(2, "李四"));
//方式三 使用value_type, 相当于pair<int, string>
mapStu.insert(map<int, string>::value_type(3, "王五"));
//方式四 直接使用[]重载, 如果键值对已经存在, 则覆盖原值
mapStu[4] = "赵六";
mapStu[4] = "小赵六";
mapStu[5] = mapStu[6];
mapStu[7] = mapStu[4];
for(map<int, string>::iterator it = mapStu.begin(); it != mapStu.end(); it++)
{
cout<<"key: "<<(*it).first<<" value: "<<(*it).second<<endl;
}
system("pause");
return 0;
}
動作環境:vc ++ 2010学習バージョン
動作結果:
注:
1)最初の3つのメソッドは、<iterator、bool>のペアを返すinsert()メソッドを使用します
2)4番目の方法は非常に直感的ですが、同じキーに遭遇すると上書きされます。たとえば、キー値4を挿入する場合、まずmapStuで主キー4のアイテムを検索します。存在しない場合は、キーが4で値がデフォルトの初期化値であるペアをmapStuに挿入し、値を変更します。 「趙劉」になる。キー4が既に存在することが判明した場合は、このキーに対応する値を変更します。
3)string strName = mapStu [8]; //値演算または挿入演算
4)mapStuがキー8を持っている場合のみ正しいフェッチ操作です。それ以外の場合は自動的にインスタンスが挿入されます。キーは8で、値はデフォルトの構築時の初期値です。
イテレータ
map.begin(); //返回容器中第一个数据的迭代器。
map.end(); //返回容器中最后一个数据之后的迭代器。
map.rbegin(); //返回容器中倒数第一个元素的迭代器。
map.rend(); //返回容器中倒数最后一个元素的后面的迭代器。