STL学习笔记(十二) 关联式容器共性
2013-05-21 21:24
274 查看
关联式容器共性:
1 关联式容器包括:
set multiset map multimap2 关联式容器共性:
关联式容器l除了可以使用标准容器共性外 还拥有以下关联容器共性:实质都是红黑树,都自动根据key排序
set<K> multiset<K> map<K,V> multimap<K,V>
查找: .find(key) 返回一个迭代器,指向找到的第一个元素 失败返回.end()
查找速度非常快 lgN
统计: .count(key) 统计 关键字等于key的元素 的个数
删除: .erase(key) 删除 关键字等于key的 所有元素
区间: .lower_bound(key) 取得关键字为key的第一个元素位置
.upper_bound(key)取得关键字为key的最后一个元素之后的位置
.equal_range(key) 一次取得关键字为key的元素的区间 返回一个pair
插入: insert(element) // 不需要写位置,容器自动放在该放的位置
构造函数可以用比较函数作为参数,默认是使用小于
bool (*compare)(K a,K b) { }
必须对key支持小于运算符,否则没法插入
3 关联容器示例:
#include <iostream> #include <set> //头文件也是set using namespace std; #include "show.h" struct Person { string name; //公有 int age; public: Person(const char *name,int a):name(name),age(a){} }; //在关联式容器中 容器内容一定要能支持 < 符号 bool operator<(const Person &a, const Person &b) { return a.age<b.age || (a.age==b.age && a.name < b.name); } ostream& operator<<(ostream& o,const Person &p) { return o << p.name << ':' << p.age; } int main() { multiset<Person> mp; mp.insert(Person("cj",23)); mp.insert(Person("zyh",24)); mp.insert(Person("jack",25)); mp.insert(Person("kk",22)); mp.insert(Person("lll",26)); mp.insert(Person("jack",25)); mp.insert(Person("lll",26)); mp.insert(Person("lll",26)); mp.insert(Person("jack",25)); mp.insert(Person("lll",26)); show(mp.begin(),mp.end()); //查找 //迭代器一定要带类型 multiset<Person>::iterator it = mp.find(Person("zyh",24)); //find 比较相等时与 < 比较的内容相关 //比如之前我在operator < 中只比较了年龄,find中找到的是年龄相同的 if( it == mp.end() ) { cout << "没有找到zyh" << endl; } else { cout << "发现目标" << *it << endl; } // 统计个数 it = mp.find(Person("jack",25)); cout << mp.count(*it) << "个" << *it <<endl; //3 it = mp.find(Person("lll",26)); cout << mp.count(*it) << "个" << *it <<endl;//4 //范围 上下界 multiset<Person>::iterator ib,ie; ib = mp.lower_bound(Person("jack",25)); ie = mp.upper_bound(Person("jack",25)); cout << "===================" << endl; show(ib,ie); //输出 jack:25 jack:25 jack:25 主要是因为树自动将值进行了排序,相同的都放在一起 typedef multiset<Person>::iterator Iter; pair< Iter,Iter> q = mp.equal_range(Person("lll",26)); //pair不用头文件 show(q.first,q.second); //lll:26 lll:26 lll:26 lll:26 cout << "======================" << endl; mp.erase(Person("jack",25)); //删除 show(mp.begin() , mp.end() ); }
相关文章推荐
- C++ STL学习笔记十二 hash_map映照容器
- 插入容器STL学习笔记(八) 序列式容器 共性
- STL学习笔记--关联式容器
- STL学习笔记——关联式容器(二级容器)
- STL学习笔记-容器的共性机制
- C++ STL学习笔记十二 hash_map映照容器
- C++ Primer 学习笔记_34_STL实践与分析(8) --引言、pair类型、关联容器
- C++ STL--queue队列容器学习笔记
- C++ Primer 学习笔记_29_STL实践与分析(3) --顺序容器的操作(下)
- STL学习笔记之 (三)容器 deque
- 泛型编程与STL学习笔记之容器
- STL学习笔记之容器--set
- nginx 源码学习笔记(十二)——基本容器——ngx_buf
- STL学习笔记--4、序列式容器之list
- STL学习笔记-priority quene容器(优先级队列)
- STL学习笔记--各种容器的运用时机
- C++ Primer 学习笔记_34_STL实践与分析(8) --引言、pair类型、关联容器
- STL学习笔记----2.容器的共通操作
- STL学习笔记之使用“交换技巧”来修整顺序容器的过剩容量
- STL学习笔记——序列式容器(一级容器)