STL学习之map容器-insert

pair<iterator,bool> insert(const value_type& x);
                     iterator insert(iterator position, const value_type& x);
template<class InputIterator>
                          void insert(InputIterator first, InputIterator last);

插入元素

map容器可以插入单个新元素(如果使用参数x)或者元素序列(如果使用输入迭代器)。

随着插入元素数量增加,容器的size也随着增加。

由于map容器不允许键值重复,所以插入操作需要确保要插入的key值在map容器中没有。如果有的话,新的元素是不允许插入的,并且此键值的映射值是不会发生改变的。

如果想允许插入相同的元素,可以参考multimap。

本质上,map容器保持所有元素按照结构体指定的比较对象排序。

map容器允许直接的访问通过map::operator[]操作(对[]操作符进行了重载),即可以通过object[key]=value;这样操作。

参数

x

    初始化插入元素的值。

position

 确定插入操作时第一个相比较的元素。该参数并不是强制插入元素的位置。

first,last

指定元素区间的迭代器。拷贝[first,last)区间的元素,并且插入到map容器中。


返回值

第一个版本的insert返回一个pair类型,pair类型的成员pair:first设置一个迭代器指针,这个迭代器指针可能指向新插入的元素或者已经在map容器中存在的有着相同key值的元素;成员pair:second元素,如果新的元素插入,返回为true,或者当已经存在相同的key,返回false。

第二个版本返回一个指向新插入的元素或者已经在map容器中存在的有着相同key值的元素的迭代器指针。

迭代器是一个成员类型,被定义成双向迭代器类型。

举例1:

#include <string>
#include <iostream>
#include <map>
#include <utility>

using namespace std;

int main(void)
{
        map<string, int> Employees;

        Employees["Mike C."] = 12306;
        Employees["Charlie M."] = 95555;
        //使用pair
        Employees.insert(std::pair<string, int>("David D.", 1984));
        Employees.insert(map<string, int>::value_type("John A.", 7582));
        Employees.insert(make_pair("Peter Q.", 5328));

        cout << "Map size: " << Employees.size() <<  endl;

        for (map<string, int>::iterator ii= Employees.begin(); ii != Employees.end(); ++ii)
        {
                    cout << (*ii).first << ":" << (*ii).second << endl;
        }
        return 0;
}                                                

执行结果:

liujl@liujl-Rev-1-0:~/mycode/STL$ ./mapEx2
Map size: 5
Charlie M.:95555
David D.:1984
John A.:7582
Mike C.:12306
Peter Q.:5328

实例2:

#include <iostream>
#include <map>

using namespace std;

int main(void)
{
	map<char, int> mymap;
	map<char, int>::iterator it;
	pair<map<char, int>::iterator, bool> ret;

	//first insert function version
	mymap.insert( pair<char, int>('a', 100) );
	mymap.insert( make_pair('d', 200) );
	mymap.insert( map<char, int>::value_type('z', 500));
	
	//check return value
	ret = mymap.insert( pair<char, int>('z', 800));
	if (ret.second == false)
	{
		cout << " element 'z' already existed!";
		cout << " with a value of " << ret.first->second << endl;
	}

	//second insert function version
	it = mymap.begin();
	mymap.insert(it, pair<char, int>('b', 300));
	mymap.insert(it, pair<char, int>('c', 400));
	
	//third insert function version
	map<char, int> othermap;
	othermap.insert(mymap.begin(), mymap.end());
	//othermap.insert(mymap.begin(), mymap.find('c'));
	
	//print container contents:

	cout << "mymap contains: " << endl;
	for (it = mymap.begin(); it != mymap.end(); it++)
		cout << (*it).first << "=>" << (*it).second << endl;
	
	cout << "other contains: " << endl;
	for (it=othermap.begin(); it != othermap.end(); it++)
		cout << (*it).first << "=>" << (*it).second << endl;
	return 0;
}

执行结果:

liujl@liujl-Rev-1-0:~/mycode/STL$ vim map_insert.cpp
liujl@liujl-Rev-1-0:~/mycode/STL$ g++ map_insert.cpp  -o map_insert
liujl@liujl-Rev-1-0:~/mycode/STL$ ./map_insert
 element 'z' already existed! with a value of 500
mymap contains: 
a=>100
b=>300
c=>400
d=>200
z=>500
other contains: 
a=>100
b=>300
c=>400
d=>200
z=>500




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值