介绍:
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;
}