博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
httpresponse结果返回map_C++与STL入门(5):映射map
阅读量:5733 次
发布时间:2019-06-18

本文共 3148 字,大约阅读时间需要 10 分钟。

map就是从键(key)到值(value)的映射。

它重载了[]运算符,使[]表示了不同的功能。

因此,map像是数组的“高级版”

例如,使用

map month_name

表示月份名字-->月份编号的映射,然后用

month_name["July"]=7

这样的方式进行赋值,表示

July --> 7

这样的映射。

下面,让我们继续了解一下map的用法:

回复map,获取CSDN论坛关于map的用法连接。

map是STL的一个关联容器,它提供一对一的hash。

  • 第一个可以称为关键字(key),每个关键字只能在map中出现一次;

  • 第二个可能称为该关键字的值(value);

就像函数,定义域必须能找到至少一个映射,但每个元素所能对应的是确定的

8f88da511ba5fe2cc06bee122b7dbf29.png

使用map得包含map类所在的头文件

#include   //注意,STL头文件没有扩展名.h

map对象是模板类,需要关键字和存储对象两个模板参数:

std:map<int, string> personnel;

这样就定义了一个用int作为索引,并拥有相关联的指向string的指针.

map的基本操作函数:

     C++ maps是一种关联式容器,包含“关键字/值”对

     begin()         返回指向map头部的迭代器

     clear()        删除所有元素

     count()         返回指定元素出现的次数

     empty()         如果map为空则返回true

     end()           返回指向map末尾的迭代器

     equal_range()   返回特殊条目的迭代器对

     erase()         删除一个元素

     find()          查找一个元素

     get_allocator() 返回map的配置器

     insert()        插入元素

     key_comp()      返回比较元素key的函数

     lower_bound()   返回键值>=给定元素的第一个位置

     max_size()      返回可以容纳的最大元素个数

     rbegin()        返回一个指向map尾部的逆向迭代器

     rend()          返回一个指向map头部的逆向迭代器

     size()          返回map中元素的个数

     swap()           交换两个map

     upper_bound()    返回键值>给定元素的第一个位置

     value_comp()     返回比较元素value的函数


例题:反片语

输入一些单词,找出所有满足如下条件的单词:该单词不能通过字母重排得到输入文本中的另一个单词。在判断是否满足条件时,字母不分大小写,但在输出时应保留输入中的大小写,按字典序排列。(大写在小写前)样例输入:ladder came tape soon leader acme RIDE lone Dreis peat ScAlE orb eye Rides dealer NotE derail LaCeS drIed noel dire Disk mace Rob dries #(输入以#结束)

样例输出:

DiskNotEderaildrIedeyeladdersoon

#include 

#include 

#include 

#include 

#include 

#include 

using namespace std;

//思路:将单词标准化排序并用map以确定是否重复

map<string, int> cnt; //用于检验标准化单词

vector<string> words; //用于存储原始单词

//标准化单词

string stdw(const string s)

{

    string ans = s;

    for (int i = 0; i < ans.length(); i++)

        ans[i] = tolower(ans[i]);

    sort(ans.begin(), ans.end());

    return ans;

}

int main()

{

    string s;

    while (cin >> s)

    {

        if (s[0] == '#')

            break;

        words.push_back(s);

        string ans;

        ans = stdw(s);

        if (!cnt.count(ans))

            cnt[ans] = 0; //count 子函数 用于检查数目 重载[]表示ans-->0映射

        cnt[ans]++;

        //非常重要,如果没有找到映射关系,会返回0;因此后面使用!会出错

    }

    vector<string> answer;

    for (int i = 0; i < words.size(); i++)

        if (cnt[stdw(words[i])] == 1)

            //if (!cnt[stdw(words[i])])取消上面的cnt[ans]++;改用此句会出错,因为没有找到映射关系会返回 0

            answer.push_back(words[i]);

    sort(answer.begin(), answer.end());

    for (int i = 0; i < answer.size(); i++)

        cout << answer[i] << endl;

    return 0;

}

#include #include #include #include #include #include using namespace std;//思路:将单词标准化排序并用map以确定是否重复map
cnt; //用于检验标准化单词vector
words; //用于存储原始单词//标准化单词string stdw(const string s){
string ans = s; for (int i = 0; i < ans.length(); i++) ans[i] = tolower(ans[i]); sort(ans.begin(), ans.end()); return ans;}int main(){
string s; while (cin >> s) {
if (s[0] == '#') break; words.push_back(s); string ans; ans = stdw(s);        if (!cnt.count(ans))//使用到计数 cnt[ans] = 0; //count 子函数 用于检查数目 重载[]表示ans-->0映射 cnt[ans]++; //非常重要,如果没有找到映射关系,会返回0;因此后面使用!会出错 } vector
answer; for (int i = 0; i < words.size(); i++) if (cnt[stdw(words[i])] == 1) //if (!cnt[stdw(words[i])])取消上面的cnt[ans]++;改用此句会出错,因为没有找到映射关系会返回 0 answer.push_back(words[i]); sort(answer.begin(), answer.end()); for (int i = 0; i < answer.size(); i++) cout << answer[i] << endl; return 0;}
结果:

fa2ba107aafb79e9132273a26b5c1a57.png

转载地址:http://itowx.baihongyu.com/

你可能感兴趣的文章
html入门学习
查看>>
安卓学习UI组件-TextSwitcher和ImageSwitcher-文字和图片切换
查看>>
Hystrix请求命令 HystrixCommand、HystrixObservableCommand
查看>>
CentOS 7下安装部署Oracle11g图文教程
查看>>
#51CTO学院四周年# 相约烤鸭”
查看>>
unit 7,8,9
查看>>
linux 命令系列之 ACL最大权限,删除,递归
查看>>
基础示例
查看>>
DOCKER源码编译
查看>>
Spring框架之IOC(控制反转)
查看>>
linux12位权限体系
查看>>
搭建kvm
查看>>
Swiper插件分页器使用
查看>>
使用ssh免密登录(ansible playbook实战)
查看>>
卡特兰数问题
查看>>
myeclipse 编辑 JSP 很卡的解决办法!!!
查看>>
loadrunner中字符串处理(待续)
查看>>
VBlog 静态页面 动态博客
查看>>
Linux打包和压缩工具的使用
查看>>
SNAT和DNAT的配置
查看>>