c++ STL 映射:map

 

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

 

原文链接: https://www.cnblogs.com/koris-yyf/p/9029970.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    c++ STL 映射:map

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/273800

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月14日 下午11:51
下一篇 2023年2月14日 下午11:53

相关推荐