您的位置:首页 > 编程语言 > C语言/C++

C++之STL中常用关联容器使用方法

2017-02-25 01:03 316 查看
在STL中常用的关联容器有set和map,其他multiset和multimap是这两个容器的扩展,区别就是打破了键值得唯一性,而在set和map中键值是唯一的,即使插入两个相同键的数据,在容器中也只保留一个。set容器内部只有键值而没有实值(我也不知道为什么还能称之为关联容器),而map里存放着元素是pair<T1,T2>对象。
set和map内部都实现了红黑树的结构就是平衡搜索树。所以它的优势是快速的插入删除、以及查找,其时间复杂度是log2N。


一. set

1.创建对象


set<T1> s;
//对于不是自己定义的数据类型,像int,double等可以不定义比较方式。
set<T,CmpStruct> s;
//自定义比较结构体
set<T,DefineStruct> s;
//自定义数据类型


//不是自定义的数据类型 ,定义比较结构就行,内部重载()
//注意不是只定义比较函数,因为set参数是结构体类型
struct CmpStruct
{
//重载()操作符,结构名+括号就成了函数的形式,好有趣
bool operator()(const T1 a, const T2 b)
{
return a<b;//从小到大
}
}
//对于自定义的数据类型 ,内部要重载<运算符
struct DefineStruct
{
int id;
string name;

bool operator<(const DefineStruct &a)
{
return this->id < a.id;
}
}


2.插入删除

insert(key):容器内部会根据红黑树的结构插入到相应位置。
erase(key):删除相应键值。


3.遍历

由于内部结构直接遍历(中序遍历)出的就是排序好的数据,这里遍历不像vector,只能使用迭代器。


4.查找

find(key):返回相应地址位置,iterator类型。如果找不到,返回值为s.end()。


set<T> s::iterator it = s.find(key);
if(it != s.end())
cout<<"找到了";
else
cout<<"没找到";


二. map

map的操作和set基本一样,优势同样是快速插入删除,查找。

创建对象时要自定义比较函数的同set

1.插入

insert(pair<T1,T2>(a,b))插入pair对象
map重载了[]操作符,m[key]=new_value;可以实现修改实值得功能,当key不存在与map中时,会创建key并初始化为new_value;
[]还可以用于访问元素,像数组一样。


2.删除

通过key删除数据

erase(key)

3,查找和set也是一样的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ STL map set
相关文章推荐