11.2关联容器概述
2016-05-29 02:10
309 查看
关联容器不支持顺序容器的位置操作,如push_back或push_front。
也不支持构造函数或插入操作这些接受一个元素值和一个数量值的操作。
也不支持构造函数或插入操作这些接受一个元素值和一个数量值的操作。
11.2.1定义关联容器
定义一个map时,必须既指明关键字类型又指明值类型;而定义一个set时,只需指明关键字类型,因为set中没有值。关联容器的初始化
每个关联容器都定义了一个默认构造函数,它创建一个指定类型的空容器。我们可以将关联容器初始化为另一个同类型容器的拷贝,或是从一个值范围类初始化关联容器,只要这些值可以转化为容器所需类型就可以。//关联容器初始化 map<string, size_t> word_count; //空容器 //列表初始化 set<string> exclude={"The","But","And","Or","An","A", "the","but","and","or","an","a"}; //三个元素,authors将姓映射为名 map<string, string> authors={{"Joyce","James"},{"Austen","Jane"},{"Dickens","Charles"}};
初始化multimap和multiset
map和set中的关键字必须是唯一的,即,对于一个给定的关键字,只能有一个元素的关键字等于它,容器multimap和multiset没有此限制。#include<iostream> #include<map> #include<set> #include<string> #include<vector> using namespace std; int main() { vector<int> ivec; for (vector<int>::size_type i = 0; i != 10; ++i) { ivec.push_back(i); ivec.push_back(i);//每个数重复保存 } //iset包含来自ivec的不重复的元素;miset包含所有20个元素 set<int> iset(ivec.cbegin(), ivec.cend()); multiset<int> miset(ivec.cbegin(), ivec.cend()); cout << ivec.size() << endl;//打印出20 cout << iset.size() << endl;//打印出10 cout << miset.size() << endl;//打印出20 return 0; }
11.2.2关键组类型的要求
对于有序容器–map、multimap、set以及multiset,关键字类型必须定义元素比较方法。在集合类型中,关键字类型就是元素类型;在映射中,关键字类型就是元素的第一部分。11.2.3 pair类型
pair定义在utility中。//pair类型 //它定义在头文件utility中,一个pair保存两个数据成员。pair是一个用来生成特定 //类型的模板 pair<string, string> anon; //保存两个string pair<string, size_t> word_count; //保存一个string和一个size_t pair<string, vector<int>> line; //保存string和vector<int> //我们也可以为每个成员提供初始化器 pair<string, string> author{"James","Joyce"}; //创建pair对象函数 pair<string, int> process(vector<string> &v) { //处理v if(!v.empty()) return {v.back(), v.back().size()}; //列表初始化 else return pair<string, int>(); //隐式构造返回值 }
#include <iostream> #include <map> #include <string> using namespace std; int main() { map<int, string> a; multimap<int, string> ma; // key键 value值 a.insert(map<int, string>::value_type(1, "One")); a.insert(map<int, string>::value_type(2, "Two")); a.insert(map<int, string>::value_type(3, "Three")); a.insert(make_pair(-1, "Minus One")); a.insert(pair<int, string>(1000, "One Thousand")); a[1000000] = "One Million"; cout << "map里一共有" << a.size() << "个key-value数据" << endl; cout << "这些数据是:" << endl; map<int, string>::const_iterator i; for (i = a.begin(); i != a.end(); ++i) { cout << "key: " << i->first << " "; cout << "Value: " << i->second.c_str(); cout << endl; } ma.insert(multimap<int, string>::value_type(3, "Three")); ma.insert(multimap<int, string>::value_type(45, "Forty Five")); ma.insert(make_pair(-1, "Minus One")); ma.insert(pair<int, string>(1000, "One Thousand")); ma.insert(pair<int, string>(1000, "One Thousand")); cout << endl << "multimap里有" << ma.size() << "个数据." << endl; multimap<int, string>::const_iterator im; for (im = ma.begin(); im != ma.end(); ++im) { cout << "Key: " << im->first<<" "; cout << "Value: " << im->second.c_str(); cout << endl; } return 0; }
相关文章推荐
- [转]logX<X对所有的X>0成立
- log(A^B) = BlogA
- csdn第一天
- JQuery—简单动画效果
- Java类的实例化过程
- bootstrap和jQuery.Gantt的css冲突问题
- 《Zabbix-ICMP ping监控添加方法》-7
- SPOJ - QTREE Query on a tree 树链剖分
- log(A/B) = logA -logB
- JDBC连接数据库(续)
- kafka集群的搭建
- logAB = logA + logB; A,B>0
- SQL性能调优
- 欢迎使用CSDN-markdown编辑器
- 大数据Java基础第十三天作业
- linux下开启Mysql开启远程连接
- Your build settings specify a provisioning profile with the UUID “”, however, no such provisioning p
- HDU5709 : Claris Loves Painting
- Java 网络IO编程总结(BIO、NIO、AIO均含完整实例代码)
- Java 网络IO编程总结(BIO、NIO、AIO均含完整实例代码)