【C/C++】关联容器pair map set

pair类型:

pair<T1,T2>  p1;创建一个空的pair对象,它的两个元素分别是T1和T2类型。

pair<T1,T2>  p1(v1,v2);

make_pair(v1,v2);

p1<p2;其定义遵循字典次序:如果p1.first<p2.first 或者 !(p2.first<p1.first) && p1.second<p2.second,则返回true.

p1==p2;

p1.first;//返回p1中名为first的公有数据成员。

p1.second;

与其他标准库类型不同,pair类可以直接访问其数据成员;其成员都是公有的,分别命名为first和second.只需使用点操作符。

map类型:

map的构造函数:

map<k,v>  m//一个空的map对象,其键类型为k,值类型为v。

map<k,v>  m(m2)//创建m2的副本m.

map<k,v>  m(b,e)//创建m.存储迭代器b和e标记的范围内所有元素的副本。

map键类型的约束:在使用关联容器时,它的键不但有一个类型,而且还有一个相关的比较函数。


map类定义的类型:

map<k,v>::key_type  //在map中用作索引的键的类型

map<k,v>::mapped_type  //在map中键所关联的值的类型

map<k,v>::value_type  //一个pair类型,它的first元素具有const map<k,v>::key_type类型,而second元素则为map<k,v>::mapped_type类型、

谨记住value_type是pair类型,它的值成员可以修改,但键成员不能修改。


map添加元素:

当使用下标访问map对象时,如:

map<string,int> word_count;

word_count["Anna"] = 1;如果在word_count中没有找到Anna的键,则map会新创建一个键值为Anna的对象,比赋值为1.

m.insert(e);//e是一个value_type类型的值。如果e.first不在m中,则插入一个值为e.second的新元素;如果该键在m中已存在,则保持m不变。该函数返回一个pair类型的对象,包含指向键为e.first的元素的map迭代器,以及一个bool类型的对象,表示是否插入了该元素。

m.insert(beg,end);

m.insert(iter,e);

map对象中一个给定键只对应一个元素。如果试图插入的元素所对应的键已在容器中,则insert将不做任何操作。

//单词统计程序
	string str;
	map< string,int> word_count;
	while(cin>>str)
	{
		pair< map<string,int>::iterator,bool> pir = word_count.insert(make_pair(str,1));
		if(!pir.second)
		{
			++pir.first->second ;
		}
	}

不修改map对象的查询操作:

m.count(k);//返回m中k的出现次数,只可能是0和1.

m.find(k);//如果m容器中存在k索引的元素,则返回指向该元素的迭代器。如果不存在,则返回超出末端的迭代器。

	int occurs = 0;
	map<string,int>::iterator it = word_count.find("jch");
	if(it!=word_count.end())
	{
		occurs = (*it).second;
	}

map对象中删除元素:

m.erase(k);//删除m中键为k的元素。返回size_type类型,表示删除的个数。

m.erase(p);//从m中删除迭代器p所指向的元素。返回void类型。

m.erase(b,e);//从m中删除一段范围内的元素,该范围由迭代器对b和e标记。


set类型:
和不能修改map中元素的键部分一样,set中的键也为const。在获得指向set中某元素的迭代器后,只能对其做读操作,而不能对其做写操作。

set.insert(k);

set.find(k);

set.count(k);






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值