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

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


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

1、pair

pair对象是一个键值对

头文件:不需要头文件

定义

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

用法

pair<string, string> p("James", "Joyce");
string one=p.first;
string two=p.second;

2、map

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

头文件

#include<map>

定义

map<string, int> m1;
map<string, int> m2(m1);//拷贝m1

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

用法

1、访问元素
m1["anna"]=1;
m1["bob"];//值初始化为0
如果有"anna"的键,将其值设为1,如果没有,添加一个<"anna",1>键值对
2、插入元素
pair<string,int> 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<string,int>::iterator it = m.find("foobar");//find返回迭代器
if (it != m.end())
	occurs = it->second;
4、删除元素
m.erase("anna");
map<string,int>::iterator iter = m.find("anna");//用迭代器删除
m.erase(iter);
5、迭代器
map<string,int>::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>

定义

set<string> s;
set<string> s1(s);//拷贝s
vector<int>vec = {1,2,3,4};
set<int> 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<string>::iterator it = s.find("anna");
if (it != s.end())
	cout<<*it<<endl;//迭代器代表的类型并不是pair,所以用*取值
3、删除元素
s.erase("anna");//如果不存在也不会报错
set<string>::iterator it = s.find("anna");
s.erase(it);//使用迭代器删除
4、迭代器
set<string>::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>//只需要map的头文件就可以了

定义

multimap<string, string> mm;
multimap<string, string> mm1(mm);

用法

1、插入元素
mm.insert(make_pair(string("Barth, John"),string("Lost in the Funhouse")));
2、查找元素
int num=mm.count("anna");//元素个数可能大于1
multimap<string,string>::iterator it =mm.find("anna");
for(int i=0;i<num;i++){
    cout<<it->second<<endl;//使用count和find操作配合进行查找
    it++;
}
3、删除元素
int erase_num = mm.erase("anna");//删除anna的所有键值对,返回删除的元素个数
multimap<string, string>::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<string, string>::iterator iter_low=mm.lower_bound("anna");
multimap<string, string>::iterator iter_up=mm.upper_bound("anna");
while(iter_low!=iter_up)
{
    cout<<iter_low->second<<endl;
    iter_low++;
}
(2)查找相同元素的迭代器2
typedef multimap<string, string>::iterator it;//使用typedef简化程序
pair<it, it>pos = mm.equal_range("anna");
while (pos.first != pos.second) {
    cout << pos.first->second << endl; // print each title
    ++pos.first;
}
(3)整个multimap的迭代器
multimap<string, string><string,int>::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<set>

定义

multiset<string> s;
multiset<string> s1(s);//拷贝s
vector<int>vec = {1,2,3,4};
multiset<int> 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<string,string>::iterator it =s.find("anna");
for(int i=0;i<num;i++){//使用count和find操作配合进行查找
    cout<<*it<<endl;//迭代器代表的类型并不是pair,所以用*取值
    it++;
}
3、删除元素
int erase_num = s.erase("anna");//删除所有anna元素,返回删除的个数
multiset<string>::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<string>::iterator iter_low=s.lower_bound("anna");
multiset<string>::iterator iter_up=s.upper_bound("anna");
while(iter_low!=iter_up)
{
    cout<<*iter_low<<endl;
    iter_low++;
}
(2)查找相同元素的迭代器2
typedef multiset<string>::iterator it;//使用typedef简化程序
pair<it, it>pos = s.equal_range("anna");
while (pos.first != pos.second) {
    cout << *pos << endl; // print each title
    ++pos.first;
}
(3)整个multiset迭代器
multiset<string>::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<unordered_map>,#include<unordered_set>

定义

定义与对应的类型相同

用法

用法相同,在multimap,multiset中,相同键和相同元素依然近邻存放。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值