上:STL容器(1)
二 联合容器(对容器概念的另一个改造,将值与关键字关联在一起)
1. set(set,前set.h):可反转,可排序,关键字是唯一的,只能存储同一类型的值。
用法如:
1) set<string> a;
2) set<string, less<string>> b; 第二个参数用于指示用来对关键字进行排序的比较函数或对象,默认使用less<>模板。
3) set<string> A(s1,s1+3); s1为string数组 即将一个迭代区间作为参数的构造函数,区间的最后一个元素是超尾符,关键字是唯一的且被排序。
常用方法:
1) 显示集合A和结合B的并集:
set_uniton(A.begin(),A.end(),B.begin(),B.end(),ostream_iterator<string, char> out(cout,” ”))
2) 联合集合将关键字看作是常量,故C.begin()返回的是一个固定迭代器。set_union()将覆盖容器中的已有数据,并要求容器有足够的空间来容纳新信息。
3) 将两个区间复制到一个新的容器集合:
set_union(A.begin(), A.end, B.begin(), B.end(), insert_iterator<set<string>>(C, C.begin()))
将复制转化为插入。
set_intersection()和set_difference()查找交集和获得两个交集的差,接口与set_union()相同。
4) lower_bound()将关键字作为参数并返回一个迭代器,该迭代器指向第一个不小于关键字集合的成员,同理upper_bound()返回的迭代器指向集合中第一个大于关键字参数的成员。
2. multiset(set,前multiset.h)
可能有多个值得关键字相同。
3. map(map,前map.h)
用法如:
map<string, int> wordmap;
set<string>::iterator si;
set<string> wordset;
for(si=wordset.begin(); si!=wordset.end(); si++)
wordmap.insert(pair<string, int>(*si, count(words.begin(), words.end(), *si)));
//wordmap[*si]=count(words.begin(), words.end, * si);
4. multimap(map,前multimap.h , 可反转的,经过排序的联合器):一个关键字可以与多个值相关联。
关键字的类型与值类型不同,特定的关键字可与多个值相关联。
1) 使用方法:
multimap<int, string> codes;//第一个参数为关键字的类型,第二个单数为所存储值得类型。可选的第三个参数用于指出对关键字进行排序的比较函数或对象。默认使用less<>模板,将关键字类型作为参数。
2) 点对:为将信息结合在一起,可将关键字类型与数据类型结合为一对,方法为使用STL的pair<Class T, Class U>模板将两种对象结合到一个对象中,值类型为pair<const keytype, datatype>。
使用方法:
pair<const int, string> item(213, “Los Angeles”);
codes.insert(item); 或者
codes.insert(pair<const int, string> (123, “Los Angeles”));
使用first和second来分别访问pair对象的两个部分,用法如:
cout<<item.first<<” ”<<item.second<<endl.
3) 基本成员方法:
count()用关键字作参数,返回具有该关键字的元素的数目。
lower_bound()和upper_bound()将关键字作为对象,工作方式与set相同。
equal_range() 用关键字作参数,返回与该关键字匹配的区间的迭代器,返回的两个值封装在一个pair对象中,此时连个模板参数是迭代其类型。用法如:
pair<multimap<KeyType, string>::iterator,
multimap<KeyType, string>::iterator> range=codes.equal_range(718).
for(it=range.first; it!=range.second; ++it){
cout<<(*it).second<<endl;
}
继续学习:http://www.stlchina.org/twiki/bin/view.pl/Main/STLLearnResouce
学习博客masterlee: http://blog.csdn.net/masterlee/
C++ Primer Plus
分享到:
相关推荐
STL容器选择流程图.JPG
标题中的"C++ Effective C++ Effective.STL.pdf More+Effective+Chinese.pdf"暗示了这是一组关于C++编程语言深入实践的资源,其中包含了经典书籍《Effective C++》、《More Effective C++》以及《Effective STL》的...
《Effective STL》是由著名C++专家Scott Meyers撰写的一本经典书籍,由Addison-Wesley出版,于2001年6月发行。这本书深入探讨了标准模板库(STL)的高效使用方法,旨在帮助程序员充分利用STL的强大功能,同时避免...
STL的容器适配器是其中的一种特殊类型,它们是基于现有容器进行抽象和封装,以满足特定的数据操作需求。 1. **STL的组成部分**: - **容器**:容器是STL的基础,它们用于存储和管理数据,如向量、列表、集合、映射...
用于初步学习STL容器方便后续的算法学习, 来源于《算法笔记》, 适用于初学者,强力推荐这本书, 非常简单的把C、C++的STL、基础数据结构的实现、查找算法、排序算法、二分思想、贪心思想的起源思想
在C++编程中,STL(Standard Template Library,标准模板库)是不可或缺的一部分,它包含了许多容器类,如map和vector,以及算法和迭代器等工具。这些容器帮助程序员高效地管理和操作数据。然而,当涉及到复杂的程序...
**STL(Standard Template Library,标准模板库)**是C++编程语言中不可或缺的一部分,它为程序员提供了高效、灵活和可重用的容器、算法和迭代器等工具。`Effective STL`这本书则深入探讨了如何有效地使用这些工具,...
Effective.STL.pdf
#### 二、STL的挑战与机遇 - **早期挑战**: - 编译器支持不一致:早期版本的编译器对模板的支持参差不齐,导致STL在不同平台上的表现差异较大。 - 文档不足:高质量的STL教程和参考资料稀缺,增加了学习难度。 ...
C++STL........................
《Effective STL》是由著名软件设计专家Scott Meyers所著的一本关于Standard Template Library(STL)的实用指南,中文版的发布使得更多的中国读者能够深入理解并熟练运用STL。这本书是C++程序员的必备参考书籍,...
《Effective STL》是由著名C++专家Scott Meyers所著的一本经典编程指南,它深入剖析了标准模板库(STL)的使用技巧和最佳实践。这本书对于任何想要提高C++编程效率,尤其是与STL相关的开发者来说,都是一份极其宝贵...
虽然《Effective STL》主要讨论的是STL的原始版本,但现代C++(C++11及以后)引入了智能指针,如unique_ptr、shared_ptr和weak_ptr,它们在管理动态内存方面提供了更加安全和自动化的解决方案,与STL容器结合使用时...
二、STL主要容器类型 1. 向量(vector):动态数组,提供随机访问和快速插入、删除(尾部)操作。 2. 列表(list):双向链表,支持快速的插入和删除,但随机访问效率较低。 3. 集合(set)和映射(map):自平衡...
#### 二、STL基础知识 1. **容器(Container)** - **概述**:容器是用于存储数据的数据结构。 - **分类**: - **序列容器**:如`vector`, `deque`, `list`等,提供线性存储方式。 - **关联容器**:如`set`, `map`...
STL包含四大核心组件:容器(Containers)、迭代器(Iterators)、算法(Algorithms)和函数对象(Function Objects)。 1. 容器:容器是存储数据的结构,如vector(动态数组)、list(双向链表)、set(红黑树实现...
STL容器,用思维导图的方式表达了一下,其中一些所有容器都通用的函数没有列举如a.size(),a.capacity()等。。希望对各位有帮助.
在标题和描述中提到的"基于stl共享内存,可以像使用STL容器一样使用共享内存",指的是通过设计一个自定义的内存分配器(Allocator),使得STL容器如vector、list、map等能够在共享内存上进行操作。这种方式的优势...