栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++ set,map,multimap,multiset,unordered 总结

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++ set,map,multimap,multiset,unordered 总结

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录
    • C++ set,map,multimap,multiset,unordered 总结
      • 1、pair
      • 2、map
      • 3、set
      • 4、multimap
      • 5、multiset
      • 6、unordered_map,unordered_set,unordered_multiset,unordered_multimap


C++ set,map,multimap,multiset,unordered 总结 1、pair

pair对象是一个键值对

头文件:不需要头文件

定义 :

pair p;
pair p1;
pair > line;
pair author("James", "Joyce");
p2=make_pair("James", "Joyce");

用法:

pair p("James", "Joyce");
string one=p.first;
string two=p.second;
2、map

map代表一个映射,是键值对的集合,每个键和值的类型分别相同,键不能重复,值可重复

头文件:

#include

定义 :

map m1;
map m2(m1);//拷贝m1

map::key_type;//键对应的类型,string
map::mapped_type;//值对应的类型,int
map::value_type;//pair

用法:

1、访问元素
m1["anna"]=1;
m1["bob"];//值初始化为0
如果有"anna"的键,将其值设为1,如果没有,添加一个<"anna",1>键值对
2、插入元素
pair p("anna",1);
m.insert(p);//插入操作插入的是pair类型
m.insert(make_pair("anna",1));//常用写法
3、查找元素
int num=m.count("anna");//计数,查找"anna"出现的次数,对于map,如果存在则为1,不存在为0

int occurs = 0;
map::iterator it = m.find("foobar");//find返回迭代器
if (it != m.end())
	occurs = it->second;
4、删除元素
m.erase("anna");
map::iterator iter = m.find("anna");//用迭代器删除
m.erase(iter);
5、迭代器
map::iterator iter = m.begin();
while (iter != m.end()) {
    cout << iter->first << endl
    << iter->second  << endl;
    ++iter; // increment iterator to denote the next element
}
6、求大小
int m_size=m.size();
3、set

set代表一个集合,每个元素类型相同,不可重复

头文件:

#include

定义 :

set s;
set s1(s);//拷贝s
vectorvec = {1,2,3,4};
set iset(vec.begin(), vec.end());//利用vector容器初始化

用法:

1、插入元素
s.insert("anna");
iset.insert(vec.begin(), vec.end());//用vector批量插入
2、查找元素
int num = s.count("anna");//计数,查找"anna"出现的次数,对于set,如果存在则为1,不存在为0
set::iterator it = s.find("anna");
if (it != s.end())
	cout<<*it<::iterator it = s.find("anna");
s.erase(it);//使用迭代器删除
4、迭代器
set::iterator iter = s.begin();
while (iter != s.end()) {
    cout << *iter<< endl;
    ++iter; // increment iterator to denote the next element
}
5、求大小
int s_size=s.size();
4、multimap

multimap代表一个映射,是键值对的集合,每个键和值的类型分别相同,键、值可重复,键相同的元素位置相邻

头文件:

#include//只需要map的头文件就可以了

定义 :

multimap mm;
multimap mm1(mm);

用法:

1、插入元素
mm.insert(make_pair(string("Barth, John"),string("Lost in the Funhouse")));
2、查找元素
int num=mm.count("anna");//元素个数可能大于1
multimap::iterator it =mm.find("anna");
for(int i=0;isecond<::iterator it=mm.find("anna");
mm.erase(it);//删除迭代器指向的第一个键值对
4、迭代器
mm.lower_bound(key);//返回一个迭代器,指向键不小于 k 的第一个元素
mm.upper_bound(key);//返回一个迭代器,指向键大于 k 的第一个元素
mm.equal_range(key);//返回一个迭代器的 pair 对象,它的 first 成员等价于 m.lower_bound(k),second 成员则等价于 m.upper_bound(k)
(1)查找相同元素的迭代器1
multimap::iterator iter_low=mm.lower_bound("anna");
multimap::iterator iter_up=mm.upper_bound("anna");
while(iter_low!=iter_up)
{
    cout<second<::iterator it;//使用typedef简化程序
pairpos = mm.equal_range("anna");
while (pos.first != pos.second) {
    cout << pos.first->second << endl; // print each title
    ++pos.first;
}
(3)整个multimap的迭代器
multimap::iterator iter = mm.begin();
while (iter != mm.end()) {
    cout << iter->first << endl
    << iter->second  << endl;
    ++iter; // increment iterator to denote the next element
}
5、求大小
int m_size=mm.size();
5、multiset

multiset代表一个集合,每个元素类型相同,可重复,相同的元素位置相邻

头文件:

#include

定义 :

multiset s;
multiset s1(s);//拷贝s
vectorvec = {1,2,3,4};
multiset iset(vec.begin(), vec.end());//利用vector容器初始化,vector中重复元素也会进入iset

用法:

1、插入元素
s.insert("anna");
iset.insert(vec.begin(), vec.end());//用vector批量插入
2、查找元素
int num = s.count("anna");//计数,查找"anna"出现的次数,可以大于1
multiset::iterator it =s.find("anna");
for(int i=0;i::iterator it = s.find("anna");
s.erase(it);//使用迭代器删除
4、迭代器
s.lower_bound(key);//返回一个迭代器,指向不小于 k 的第一个元素
s.upper_bound(key);//返回一个迭代器,指向大于 k 的第一个元素
s.equal_range(key);//返回一个迭代器的 pair 对象,它的 first 成员等价于 s.lower_bound(k),second 成员则等价于 s.upper_bound(k)
(1)查找相同元素的迭代器1
multiset::iterator iter_low=s.lower_bound("anna");
multiset::iterator iter_up=s.upper_bound("anna");
while(iter_low!=iter_up)
{
    cout<<*iter_low<::iterator it;//使用typedef简化程序
pairpos = s.equal_range("anna");
while (pos.first != pos.second) {
    cout << *pos << endl; // print each title
    ++pos.first;
}
(3)整个multiset迭代器
multiset::iterator iter = s.begin();
while (iter != s.end()) {
    cout << *iter<< endl;
    ++iter; // increment iterator to denote the next element
}
5、求大小
int s_size=s.size();
6、unordered_map,unordered_set,unordered_multiset,unordered_multimap

C++11标准定义的4个无序容器,使用哈希函数来组织元素,

头文件:

#include,#include

定义 :

定义与对应的类型相同

用法:

用法相同,在multimap,multiset中,相同键和相同元素依然近邻存放。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/928243.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号