我是靠谱客的博主 健康砖头,最近开发中收集的这篇文章主要介绍c++ STL 映射:map,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

 

<map映射>

Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据 处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。这里说下map内部数据的组织,map内部自建一颗红黑树(一 种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的。

头文件:#include<map>

功能:建立key-value的映射  key与value是任何你需要的类型  

exp:map<char,int> a   建立一个char到int的映射a。

常用语句:begin()返回map头部迭代器

              end()返回尾部迭代器

             clear()清空所有元素

             erase()删除一个元素

             find()查找一个元素

             empty()如果为空则返回true

             size()返回map大小

             count(elem)返回某个元素个数

 

例题:UVa 156 -反片语

大意是给你几串字符串 求出自身字符随意组合后不会出现在这些字符串里面的字符串 按字典序排序。

Sample input

 

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
#

 

Sample output

 

Disk
NotE
derail
drIed
eye
ladder
soon
分析
这道题的解法很多,最简化的方式就是使用map容器。想到使用“标准化”。
整体思路:
1.写一个标准化函数(实现大写字母转换为小写(tolower()函数),单词排序。注意使用const是为了不改变s的初值)
2.两个vector容器(words,ans),一个map容器(cnt)
words存储所有的单词
map存储标准化后对应单词以及出现次数的值,相当于一个表格。
words经过查表map,把对应的符合值给ans
感觉初次写map还是挺爽的...

#include<iostream>
#include<map>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;
map<string,int>mmap;
vector<string> str;


string standard(const string &s)
{
string t=s;
for(int i=0;i<s.size();i++)
{
t[i]=tolower(s[i]);//转换成小写字母 
}
sort(t.begin(),t.end());
return t;
}


int main()
{
string s;
while(cin>>s)
{
if(s[0]=='#')
break;
str.push_back(s);//推入vector 
string r=standard(s);//将其标准化

mmap[r]++;
}

vector<string>ans;
for(vector<string>::iterator it=str.begin();it!=str.end();it++)
{
if(mmap[standard(*it)]==1)
ans.push_back(*it);
}

sort(ans.begin(),ans.end());
for(vector<string>::iterator it=ans.begin();it!=ans.end();it++)
{
   cout<<*it<<endl;
}


return 0;
 } 

 

 

 

 

最后

以上就是健康砖头为你收集整理的c++ STL 映射:map的全部内容,希望文章能够帮你解决c++ STL 映射:map所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部