map/multimap容器的基本概念
1.map容器的基本概念
map的特性是,所有元素都会根据元素的键值自动排序,map所有的元素都是pair,同时拥有键值和实值,pair第一元素被视为键值,第二元素被视为实值,map不允许两个元素有相同的键值。
可以通过map的迭代器改变map的键值吗》答案是不行的,因为map的键值关系到map元素的排列规则,任意改变map键值将会严重破坏map组织,如果想要修改map元素的实值,那是可以的。
map和list拥有相同的某些性质,当对他的容器元素进行新增或者删除操作时候,操作之前的迭代器,在操作完成之后仍然有效,被删除的那个元素的迭代器是个例外。
与set和multiset性质类似,map和multimap性质也是差不多的,就是multimap可以允许键值重复。
map和multimap底层实现都是红黑树。
2.map容器常用api
2.1 插入
vvoid test_map() {
map<int, int>m;
//插入方式
m.insert(pair<int, int>(1, 10));
//c插入方式2
m.insert(make_pair(2, 20));
//插入方法3
m[4] = 40;
for (map<int, int>::iterator it = m.begin(); it != m.end(); it++) {
cout << "the key is :" << it->first << " " << "the value is :"<<it->second << endl;
}
}
2.2删除
earse(pos)//删除pos迭代器所指的元素,返回下一个元素的迭代器
earse(beg,end)//删除区间内的所有元素,返回下一个元素的迭代器
earse(keyelem)//删除容器内key为keyelem的元素,即键值为keyelem的
void test_map() {
map<int, int>m;
//插入方式
m.insert(pair<int, int>(1, 10));
//c插入方式2
m.insert(make_pair(2, 20));
m.insert(make_pair(3, 30));
//插入方法3
m[4] = 40;
for (map<int, int>::iterator it = m.begin(); it != m.end(); it++) {
cout << "the key is :" << it->first << " " << "the value is :"<<it->second << endl;
}
cout << " " << endl;
m.erase(4);
for (map<int, int>::iterator it = m.begin(); it != m.end(); it++) {
cout << "the key is :" << it->first << " " << "the value is :" << it->second << endl;
}
}
2.3 查找
void test_m1() {
map<int, int>m;
m.insert(pair<int, int>(1, 10));
m.insert(make_pair(2, 20));
m.insert(make_pair(3, 30));
m[4] = 40;
map<int, int>::iterator pos = m.find(3);
if (pos != m.end()) {
cout << "find the key is " << (*pos).first << "and the value is :" << (*pos).second << endl;
}
}
3 总结
-
关联式容器
-
插入:
-
m.insert(pair<int.int>(1,1))
-
m.insert(make_pair(1,1))
-
m.insert(map<int,int>::value_type(3,3)
-
  m[4]=4