标准库 map multimap元素访问

一,map,unordered_map下标操作

下标操作种类 功能描述
c[k] 返回关键字为k的元素;如果k不在c中,添加一个关键字为k的元素,并对其初始化
c.at(k) 访问关键字为k的元素;若k不在c中,抛出out_of_range异常

### 注意:

1,当使用使用自定义类作为key时,这个类必须重写operator<函数

2,下标操作只适用于const map,unordered_map

二,访问元素

查找元素的操作 功能描述
c.find(k) 返回一个迭代器,指向第一个关键字为k的元素,若k不在c种,则返回c.end()
c.count(k) 返回关键字等于k的元素的数量。
c.lower_bound(k) 返回一个迭代器,指向第一个关键字大于等于k的元素。若k不在c中,返回和c.upper_bound(k)相等的迭代器。
c.upper_bound(k) 返回一个迭代器,指向第一个关键字大于k的元素。若k不在c中,返回和c.lower_bound(k)相等的迭代器。
c.equal_range(k) 返回一个pair,pair里面是2个c的迭代器。first为第一个关键字等于k的迭代器,second为最后一个关键字等于k的位置的下一个位置的迭代器。若未找到,则pair的2个成员都等于c.end()

小例子向导:

程序块 功能描述
test1 map的下标操作
test2 map 用自定义类型的下标操作
test3 map的查找
test4 multimap的查找

小例子:

#include <iostream>
#include <map>
#include <unordered_map>
#include <set>
#include <vector> using namespace std; class Test{
public:
Test(int d = 0):data(d){}
bool operator<(const Test& s)const{
return s.data < data;
}
const int& getData()const{
return data;
}
private:
int data;
};
int main(){
//test1 map的下标操作
/*
map<string,int> smap{{"aa",12},{"bb",10}};
unordered_map<int, int> imap{{1,11},{2,22}};
map<string,int>::mapped_type m1 = smap["aa"];//m1为int
cout << m1 << endl;
unordered_map<string,int>::mapped_type m2 = imap[2];//m2为int
cout << m2 << endl;
smap["aa"] = 33;
cout << smap["aa"] << endl;
smap["cc"] = 13;//想smap添加{"cc",13}
cout << smap["cc"] << endl;
cout << smap.at("cc") << endl;
//cout << smap.at("ccd") << endl;//抛出out_of_range异常
map<string,int>::mapped_type m3 = smap.at("aa");
cout << m3 << endl;
//想smap里添加了{"dd", 0},
cout << smap["dd"] << endl;
for(auto const &s : smap){
cout << s.first << "," << s.second << endl;
}
*/ //test2 map 用自定义类型的下标操作
/*
map<Test,int> tmap{{Test(10), 10},{Test(11), 11}};
tmap[Test()] = 1;
for(auto const &s : tmap){
cout << s.first.getData() << "," << s.second << endl;
}
*/ //test3 map的查找
/*
map<int, int> imap{{1,1},{3,3},{2,2},{5,5},{4,4}};
map<int,int>::iterator it1 = imap.find(1);
cout << it1->first << endl;
map<int,int>::iterator it2 = imap.find(4);//返回imap.end()
if(it2 == imap.end()){cout << "it2 is end" << endl;}
cout << imap.count(2) << endl;
auto it3 = imap.lower_bound(2);//{2,2}
cout << it3->first << "," << it3->second << endl;
auto it4 = imap.upper_bound(4);//{5,5}
cout << it4->first << "," << it4->second << endl;
*/ //test4 multimap的查找
multimap<string, string> autrs{{"aaa","n1"},{"bbb","n1"},{"aaa","n2"},
{"aaa","n3"}};
string sch("aaa");
//方法1
auto cnt = autrs.count(sch);
auto it = autrs.find(sch);
while(cnt){
cout << it->second << endl;
++it;
--cnt;
}
cout << "-----------------" << endl;
//方法2
for(auto beg = autrs.lower_bound(sch),end = autrs.upper_bound(sch);
beg != end; ++beg){
cout << beg->second << endl;
}
cout << "-----------------" << endl;
//方法3
for(auto pos = autrs.equal_range(sch);pos.first != pos.second;++pos.first){
cout << pos.first->second << endl;
}
}

github完整代码

c/c++ 学习互助QQ群:877684253

本人微信:xiaoshitou5854

c/c++ 标准库 map multimap元素访问的更多相关文章

  1. c/c++ 标准库 map set 大锅炖

    标准库 map set 大锅炖 一,关联容器有哪些 按关键字有序保存元素 map 保存key和value set 只保存key mulutimap key可以重复出现 multiset key可以重复 ...

  2. c/c++ 标准库 map set 删除

    标准库 map set 删除 删除操作 有map如下: map<int, size_t> cnt{{2,22}, {3,33}, {1,11}, {4,44}; 删除方法: 删除操作种类 ...

  3. c/c++ 标准库 map set 插入

    标准库 map set 插入 一,插入操作 有map如下: map<string, size_t> cnt; 插入方法: 插入操作种类 功能描述 cnt.insert({"abc ...

  4. C++之标准库map

    目录 1.成员函数 2.元素访问 3.迭代器Iterators(C++ 11) 4.容量Capacity 5.修改函数(C++ 11和C++ 17) 6.查找表Lookup 7.观察Observers ...

  5. C++ Primer 有感(标准库map类型)

    map是键-值对的集合.map类型通常可以理解为关联数组:可以使用键作为下标获取一个值,正如内置数组一样.而关联的本质在于元素的值于某个特定的键相关联,而并非通过元素在数组中的位置获取. 1.map对 ...

  6. C++ Primer 有感(标准库vector及迭代器)

    vector是同一种对象的集合,每个对象都有一个对应的整数索引值.和string对象一样,标准库将负责管理与存储元素相关的类存.引入头文件 #include<vector> 1.vecto ...

  7. C++标准库vector以及迭代器

    今天看C++的书,出现了一个新的概念,容器vector以及容器迭代器. vector是同一种对象的集合,每个对象都有一个对应的整数索引值.和string对象一样,标准库将负责管理与存储元素相关的类存. ...

  8. C++标准库vector及迭代器

    vector是同一种对象的集合,每个对象都有一个对应的整数索引值.和string对象一样,标准库将负责管理与存储元素相关的类存.引入头文件 #include<vector> 1.vecto ...

  9. Python 标准库、第三方库

    Python 标准库.第三方库 Python数据工具箱涵盖从数据源到数据可视化的完整流程中涉及到的常用库.函数和外部工具.其中既有Python内置函数和标准库,又有第三方库和工具.这些库可用于文件读写 ...

随机推荐

  1. MongoDB副本集(一主两从)读写分离、故障转移功能环境部署记录

    Mongodb是一种非关系数据库(NoSQL),非关系型数据库的产生就是为了解决大数据量.高扩展性.高性能.灵活数据模型.高可用性.MongoDB官方已经不建议使用主从模式了,替代方案是采用副本集的模 ...

  2. MySQL系列详解七:MySQL双主架构演示-技术流ken

    前言 在企业中,数据库高可用一直是企业的重中之重,中小企业很多都是使用mysql主从方案,一主多从,读写分离等,但是单主存在单点故障,从库切换成主库需要作改动.因此,如果是双主或者多主,就会增加mys ...

  3. javascript小实例,移动端页面中的拖拽

    上文说到,想将移动端的拖拽说一说,那现在趁有时间,就将这个福利文带来了,哈哈! 在我还不知道怎么做移动端的手势操作的时候,我觉得这TM实在是太难了,这是多么高深的学问啊,手势操作耶,上滑下滑左滑右滑的 ...

  4. NET(C#)接入Dubbo服务,Zookeeper作为Dubbo服务的注册中心,实现thrift协议访问接口(3)

    如何引用Zookeeper.dll 下载最新版本的Zookeeper 地址:http://mirrors.cnnic.cn/apache/zookeeper/ 没有.NET代码 dotnet代码下载 ...

  5. IIS (安装SSL证书后) 实现 HTTP 自动跳转到 HTTPS

    IIS 里 安装好 SSL 证书后,如何实现 在浏览器里录入 http://www.xxx.com,会自动跳转到 https://www.xxx.com 呢. 首先,下载并安装 IIS 扩展: URL ...

  6. Java集合性能分析-疯狂Java讲义

    一.各Set实现类的性能分析 HashSet和TreeSet是Set的两个典型实现.HashSet的性能总是比TreeSet好(特别是最常用的添加.查询元素等操作),因为TreeSet需要额外的红黑树 ...

  7. eclipse下svn的使用

    描述:本篇用解决下面的案例中的问题来描述eclipse svn插件的使用. a.案例 某研发团队开发了一款名为App,目前已发布v1.0版本.此项目初期已有部分基础代码, 研发团队再此基础代码上经过3 ...

  8. java实现无序数组结构

    一.数组的2种定义方式 数据类型 []  数组名称 = new 数据类型[数组长度]; 这里 [] 可以放在数组名称的前面,也可以放在数组名称的后面,一般放在名称的前面 数据类型 [] 数组名称 = ...

  9. Git学习(一)

    版本控制系统是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统.版本控制系统不仅可以应用于软件源代码的文本文件,而且可以对任何类型的文件进行版本控制. 一.集中式版本控制系统 v.s ...

  10. react-router 嵌套路由 内层route找不到

    今天在做嵌套路由的时候,没有报错,但是页面显示为空,搜索了一下资料,有两个原因: 1.exact精确匹配 <Route component={xxx} path="/" /& ...