一、set
set是库里提供的近似平衡二叉搜索树,底层用红黑树实现的,所以是近似平衡,而不是绝对的平衡。
#include<set>
template < class T, // set::key_type/value_type
class Compare = less<T>, // set::key_compare/value_compare
class Alloc = allocator<T> // set::allocator_type
>
class set;
1.模板参数:
①.K模型
②.定制的仿函数,缺省为less。中序遍历从小到大排序。
③.空间配适器,也是缺省的。
2.常见的接口
①.set: :insert 插入数据
②.set: :erase 删除数据
③.set: :find 查找数据
④.set: :iterator 迭代器
set里面的value都是唯一的一个值,multiset里可以含有很多相同的值
3.程序演示
#include<set>
#include<iostream>
using namespace std;
void FunTest()
{
set<int, less<int>> s1;
s1.insert(1);
s1.insert(2);
s1.insert(3);
s1.insert(4);
s1.insert(9);
s1.insert(7);
s1.insert(7);
s1.insert(8);
s1.insert(9);
s1.insert(0);
s1.insert(10);
set<int, less<int>>::iterator it1 = s1.begin();
set<int, less<int>>::iterator it2 = s1.find(10);
if (it2 != s1.end())
{
cout << "找到了" << *it2<<endl;
}
while (it1 != s1.end())
{
cout << *it1 << " ";
++it1;
}
cout << endl;
}
int main()
{
FunTest();
return 0;
}
二、map
底层也是红黑树
提供K,V模型
template < class Key, // map::key_type
class T, // map::mapped_type
class Compare = less<Key>, // map::key_compare
class Alloc = allocator<pair<const Key,T> > // map::allocator_type
> class map;
typedef struct pair
{
K first;//key
V second;//value
}value_type;
2.常见的接口
map: :insert 插入数据
single element (1)//后插入一个元素
pair<iterator,bool> insert (const value_type& val);
with hint (2)//对应位置插
iterator insert (iterator position, const value_type& val);
range (3)//给出一段迭代器空间插入 相应的值
template <class InputIterator>
void insert (InputIterator first, InputIterator last);
map::operator[] 重载[] 下面详细介绍
map::erase 删除数据
map::find 查找数据
map::iterator 迭代器
重载operator[],是用第一个模板参数key_value 查找对应的V 底层实现代码为:
(*((this->insert(make_pair(k,mapped_type()))).first)).second
3.测试程序
void TestMap()
{
map<string, string> dict;
dict.insert(pair<string, string>("red", "红"));
dict.insert(pair<string, string>("blank", "黑"));
dict.insert(pair<string, string>("blue", "蓝"));
dict.insert(pair<string, string>("green", "绿"));
dict.insert(pair<string,string>("blank", "黑"));
dict["white"] = "白色";//查找white,没有的话插入white
map< string, string>::iterator it;
it = dict.begin();
while (it != dict.end())
{
cout << it->first << ":" << it->second<< endl;
it++;
}
it = dict.find("green");//find()
cout <<it->second<<endl;
}
int main()
{
TestMap();
return 0;
}
测试结果:
三、mulitset、mulitset
简单的介绍一下和map、set不同的是里面可以存放相同key的元素。