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

关联容器 map/set/multimap/multiset

2017-03-21 20:18 423 查看
关联容器分有序和无序。

有序容器的名称们简介
map关联数组,保存键-值对
set关键字就是它的值,只保存关键字
multimap关键字可以重复出现的map
multiset关键字可以重复出现的set
无序容器的名称们简介
unordered_map哈希函数组织的map
unordered_set哈希函数组织的set
unordered_multimap关键字可以重复出现的哈希函数组织的map
unoedered_multiset关键字可以重复出现的哈希函数组织的set
两个主要的关联容器是map和set。

总结map/multimap

1.定义一个map

map<string,int> Person;


2.向map里添加元素

map<string,int> Company;
string word("X");
Company.insert({word,15});
/*
这个方法返回值是
auto ret = pair<map<string,int> :: iterator,bool>
ret.first是这个元素的迭代器,如果这个元素之前存在,返回旧元素的迭代器,否则返回新位置的迭代器
ret.second标志是否插入成功。如果元素之前已经存在,则insert什么也不做
*/
Company["Baidu"] = 17;
/*
向Company添加关键字是"Baidu",值是17的元素
*/


3.对map进行下标操作

map<string,int> Company;
Company[K];
/*
返回关键字是K的元素。如果没有K这个关键字,就添加一个关键字是K的元素,对其初始化
*/
Company.at(K);
/*
访问关键字是K的元素,有参数检查的过程,如果没有K这个关键字,就抛出out_of_range的异常
*/


4.访问map中的元素

map<string,int> Company;
Company.find(K);//返回一个迭代器,指向关键字是K的元素
Company.count(K);//返回关键字为K的元素的数量
Company.lower_bound(K);//返回迭代器指向关键字不小于K的第一个元素
Company.upper_bound(K);//返回迭代器指向关键字大于K的第一个元素
Company.equal_range(K);//返回迭代器,表示关键字是K的元素的范围


5.获取map元素各数

map<string,int> Company;
Company.size();


6.清空和判空

map<string,int> Company;
Company.clear();//容器清空
Company.empty();//容器判空


7.删除容器中元素

map<string,int> Company;
Company.erase(K);//删除建是K的元素
Company.erase(pos);//删除pos位置的元素
Company.erase(b,e);//删除从b到e的所有元素


总结set/multiset

1.构造set

set<int> Grade;


2.添加元素

set<int> Grade;
Grade.insert(10);//和map的insert方法同理


3.查找容器中元素

set<int> Grade;
Grade.find(K);
//返回一个迭代器,指向值是K的元素。如果没有,返回尾后迭代器
Grade.count(K);//返回值为K的元素的数量
Grade.lower_bound(K);//返回的迭代器指向值不小于K的第一个元素
Grade.upper_bound(K);//返回的迭代器指向值大于K的第一个元素
Grade.equal_range(K);//返回的迭代器,表示值是K的元素的范围


4.遍历

set<int> Grade;
set<int> :: iterator iter = Grade.begin();
while(iter != Grade.end() ) {
cout << iter -> first << " : " << iter -> second << endl;
iter ++;
}


5.清空判空,初始化,访问

set/multiset和map/multimap类似。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ 容器