关联容器
底层实现结构:红黑树 有效排序 高效查找O(lgn)
| 名称 | 备注 |
|---|---|
| map | 键值不相等;不可重复;有序; |
| multimap | 可重复; |
| set | 键值相等;不可重复;有序;不可修改; |
| multiset | 可重复; |
代码
(map)
#include<iostream>
#include<map>
#include<string>
using namespace std;
int main() {
//声明
map<string, int> mymap;
map<string, int> mymap = { {"C语言教程",10},{"STL教程",20} };
map<string, int> mymap = { make_pair("C语言教程",10),make_pair("STL教程",20) };
map<string, int> newmap(mymap);
map<string, int> newmap(++mymap.begin(), mymap.end());
//遍历
for (auto iter = mymap.begin(); iter != mymap.end(); iter++)
cout << iter->first << " " << iter->second << endl;
//查找
auto iter = mymap.find("STL教程");//返回指定key的迭代器 若不存在则返回end()
if (iter != mymap.end())
cout << iter->first << " " << iter->second << endl;
//计数
int count = mymap.count("C");//返回指定key的键对个数
//访问
cout << mymap["STL教程"] << endl;
//插入
mymap.insert({"Java教程", 30});
mymap.insert(++mymap.begin(), { "Java教程", 30 });
mymap.insert(newmap.begin(), newmap.end()--);
mymap.insert({ { "Java教程", 30 }, { "Python教程",40 } });
mymap.emplace("Java教程",30);//返回键对 和 bool 成功为1失败为0
mymap.emplace_hint(++mymap.begin(),"Java教程", 30);//返回迭代器
mymap["Java教程"] = 30;
//删除
mymap.erase("Python教程");
//交换
mymap.swap(newmap);
//清空
mymap.clear();
return 0;
}
(multimap)
- 没有[]定位指定key
- 没有at() 成员函数
- 头文件仍是引用 map
(set)
- 不再以键对方式存储
- 没有[]定位值
- 没有at()成员函数
- 不可修改
#include<iostream>
#include<set>
#include<string>
using namespace std;
int main() {
//声明
set<string> myset;
set<string> myset = { "http://c.biancheng.net/java/",
"http://c.biancheng.net/stl/",
"http://c.biancheng.net/python/" };
set<string> newset(myset);
set<string> newset(++myset.begin(), myset.end());
//删除
myset.erase("http://c.biancheng.net/java/");
myset.erase(myset.begin());
myset.erase(myset.begin(), myset.end()--);
return 0;
}
(multiset)
- 不再限定唯一值
- 头文件仍是引用 set
本文详细介绍了C++ STL中的关联容器,包括map、multimap、set和multiset的使用方法,展示了如何进行声明、遍历、查找、计数、访问、插入、删除等操作,并提供了实用的代码示例。
1692

被折叠的 条评论
为什么被折叠?



