multimap
是一个允许键(key)重复的关联容器。适合用于一对多的更新。 允许多个键拥有相同的值。基于红黑树
。
常见问题
1、如何在 multimap中搜索一个特定键对应的所哟值?
- 使用
equal_range
获得一个迭代器,他包含给定键的第一个元素和超过最后一个元素的迭代器。遍历这个范围来找到相对应的值。2、如何从 multimap 中删除一个特定的键值对?
- 使用
erase
找到特定的键值对。键是排序好的。直接修改会改变顺序。如果要修改,先删除要修改的键,再插入新元素3、在 multimap 中插入数据有什么特别之处?
- 不需要检查键是否已经存在。由于 multimap 允许键的重复,插入操作会简单地添加一个新的键值对到容器中,即使该键已经有一个或多个关联值。您可以使用 insert 执行插入操作。
4、multimap 是如何保证元素顺序的?
- 使用平衡二叉树红黑树来存储元素。
#include < map >
multimap
myMap;
键类型 KeyType:必须支持 < 运算符,或传入自定义比较函数。
值类型 ValueType:任意类型(包括自定义类型)。
int main(){
pair<int,int>pair1={1,2};
pair<int,int>pair2=make_pair(1,2);
multimap<int ,int>multimap1={{1,2},{1,2}};
multimap<int ,int>multimap2={pair1,pair2};
multimap<int ,int>multimap3(multimap2);
multimap<int ,int>multimap4=multimap3;
multimap<int ,int>multimap5{pair<int,int>(1,2)};
}
// 自定义键类型的比较规则(假设 Key 是结构体)
struct Key { int id; };
struct Compare {
bool operator()(const Key& a, const Key& b) const {
return a.id < b.id;
}
};
multimap<Key, string, Compare> customMultimap;
#include
#include
#include
using namespace std;
int main(){
multimap<int,int>m;
m.insert(pair<int,int>(1,2));
for(auto i:m){
cout<<"first:"<<i.first<<" "<<"second:"<<i.second<<endl;
//first:1 second:2
}
}
int main(){
multimap<int,int>m;
multimap<int,int>multimap1={{2,3},{1,2}};
m.insert(multimap1.begin(),multimap1.end());
for(auto i:m){
cout<<"first:"<<i.first<<" "<<"second:"<<i.second<<endl;
/*
first:1 second:2
first:2 second:3
*/
}
}
int main(){
multimap<int,int>m;
multimap<int,int>multimap1={{2,3},{1,2}};
m.insert({{1,2},{2,3}});
for(auto i:m){
cout<<"first:"<<i.first<<" "<<"second:"<<i.second<<endl;
/*
first:1 second:2
first:2 second:3
*/
}
}
int main(){
multimap<int,int>m;
m.insert(m.begin(),{1,2});
for(auto i:m){
cout<<"first:"<<i.first<<" "<<"second:"<<i.second<<endl;
/*
first:1 second:2
*/
}
}
int main(){
multimap<int,int>m={{1,2},{2,3}};
m.erase(1);
for(auto i:m){
cout<<"first:"<<i.first<<" "<<"second:"<<i.second<<endl;
/*
first:2 second:3
*/
}
}
int main(){
multimap<int,int>m={{1,2},{2,3}};
m.erase(m.begin(),m.end());
for(auto i:m){
cout<<"first:"<<i.first<<" "<<"second:"<<i.second<<endl;
//
}
}
int main(){
multimap<int,int>m={{1,2},{2,3}};
m.erase(m.begin());
for(auto i:m){
cout<<"first:"<<i.first<<" "<<"second:"<<i.second<<endl;
//first:2 second:3
}
}
int main(){
multimap<int,int>m={{1,2},{2,3},{2,4}};
auto j = m.equal_range(2);
auto start = j.first;
auto end = j.second;
for(multimap<int,int>::iterator it=start;it!=end;it++){
cout<<"first:"<<it->first<<" "<<"second:"<<it->second<<endl;
//first:2 second:3
//first:2 second:4
}
}
int main(){
multimap<int,int>m={{1,2},{2,3},{2,4}};
auto i = m.find(2);
cout<<i->first<<" "<<i->second;
// 2 3
}
int main(){
multimap<int,int>m={{1,2},{2,3},{2,4}};
auto i = m.count(2);
cout<<i;
//2
}
int main(){
multimap<int,int>m={{1,2},{2,3},{2,4}};
int num = m.size();
cout<<num<<endl;//3
}
int main(){
multimap<int,int>m={{1,2},{2,3},{2,4}};
if(m.empty()==1){
cout<<"m是空的"<<endl;
}else{
cout<<"m不是空的"<<endl;
}
//m不是空的
}
int main(){
multimap<int,int>m1={{1,2},{2,3},{2,4}};
multimap<int,int>m2={{2,3}};
m1.swap(m2);
auto i = m1.begin();
cout<<"second :"<<i->second<<endl;
cout<<"first : "<<i->first;
//second :3
//first : 2
}
int main(){
multimap<int,int>m={{1,2},{2,3},{2,4}};
auto i = m.begin();
auto j =m.end();
cout<<"begin :"<<i->first<<endl;
cout<<"end: "<<j->first;
//begin :1
//end: 3
}
int main(){
multimap<int,int>m={{1,2},{2,3},{2,4}};
auto i = m.lower_bound(1);
cout<<i->first<<" "<<i->second;//1 2
}
int main(){
multimap<int,int>m={{1,2},{2,3},{2,4}};
auto i = m.upper_bound(1);
cout<<i->first<<" "<<i->second;//2 3
}