multimap多重关联容器

介绍:

multimap容器与map类似,唯一的不同就是允许重复键

例如:同一个人可能有多少个手机号码,DNS服务器可以将几个URLs映射到相同的IP地址等

multimap中不存在下标运算符


调用头文件:

#include<map>

using namespace std;


详细用法:

map<string, int> p;      ------      定义一个字符串与整型关联容器,其中每个字符串都对应着一个或多个整数,但每个字符串仍为独特的key

map<string, int> k(p)      ------      容器复制

multimap关联值的插入:

  • p.insert(make_pair("phone", 12345668));
  • p.insert(pair<string, int>("phone", 14444444));
  • p.insert插入成功后返回迭代指针,而不是返回bool类型

mulitmap关联值的查找:

  • p.find("phone")      ------      返回指向第一个与"phone"匹配的pair类型迭代指针,如果找不到返回p.end()
  • p.count("phone")      ------      返回"phone"关联值的数量,如果键"phone"没有出现过当然返回0
  • p.equal_range("phone");      ------      返回两个迭代指针构成的pair,第一个迭代指针(first)指向第一个与"phone"匹配的pair,第二个迭代指针(second)指向最后一个与"phone"匹配的pair的下一个位置(就是end())
  • p.lower_bound("phone");      ------      查找第一个与键"phone"关联的值
  • p.upper_bound("phone");      ------      是查找第一个键值比"phone"大的元素,具体看例子

multimap关联值的删除:

  • p.erase("phone")      ------      直接删除该键值的所有元素
  • p.erase(it)      ------      删除迭代器it上的元素


#include<iostream>
#include<string>
#include<algorithm>
#include<map>
using namespace std;
multimap<string, int> p;
typedef multimap<string, int>::iterator pit;
pair<pit, pit> q;
int main(void)
{
	pit it;
	p.insert(make_pair("phone", 12345678));
	p.insert(pair<string, int>("phone", 135724579));
	p.insert(pair<string, int>("phone", 12345678));
	p.insert(pair<string, int>("phonek", 5));
	p.insert(pair<string, int>("phonekk", 6));
	it = p.find("phone");
	printf("%d %d\n", p.count("nono"), p.count("phone"));
	if(it!=p.end())
		printf("%d\n", it->second);
	puts("---------------------------------------");

	q = p.equal_range("phone");
	for(it=q.first;it!=q.second;it++)
		printf("%d\n", it->second);
	puts("---------------------------------------");

	it = p.lower_bound("phone");
	printf("%d\n", it->second);
	printf("%d\n", (++it)->second);
	it = p.upper_bound("phone");
	printf("%d\n", it->second);
	printf("%d\n", (++it)->second);
	puts("---------------------------------------");

	q = p.equal_range("phone");
	for(it=q.first;it!=q.second;it++)
	{
		if(it->first=="phone" && it->second==12345678)
			break;
	}
	p.erase(it);
	q = p.equal_range("phone");
	for(it=q.first;it!=q.second;it++)
		printf("%d\n", it->second);
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值