Most crossword puzzle fans are used to anagrams — groups of words with the same letters in different

orders — for example OPTS, SPOT, STOP, POTS and POST. Some words however do not have this

attribute, no matter how you rearrange their letters, you cannot form another word. Such words are

called ananagrams, an example is QUIZ.

Obviously such definitions depend on the domain within which we are working; you might think

that ATHENE is an ananagram, whereas any chemist would quickly produce ETHANE. One possible

domain would be the entire English language, but this could lead to some problems. One could restrict

the domain to, say, Music, in which case SCALE becomes a relative ananagram (LACES is not in the

same domain) but NOTE is not since it can produce TONE.

Write a program that will read in the dictionary of a restricted domain and determine the relative

ananagrams. Note that single letter words are, ipso facto, relative ananagrams since they cannot be

“rearranged” at all. The dictionary will contain no more than 1000 words.

Input

Input will consist of a series of lines. No line will be more than 80 characters long, but may contain any

number of words. Words consist of up to 20 upper and/or lower case letters, and will not be broken

across lines. Spaces may appear freely around words, and at least one space separates multiple words

on the same line. Note that words that contain the same letters but of differing case are considered to

be anagrams of each other, thus ‘tIeD’ and ‘EdiT’ are anagrams. The file will be terminated by a line

consisting of a single ‘#’.

Output

Output will consist of a series of lines. Each line will consist of a single word that is a relative ananagram

in the input dictionary. Words must be output in lexicographic (case-sensitive) order. There will always

be at least one relative ananagram.

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

关于昨晚的题,按昨天的思路写出来下面的代码,写一个比较函数,就能出结果,但是这毕竟是STL训练,而且当数据量上去的时候,这样的写法绝对会超时,数组绝对盛不下。

#include<cmath>
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<vector>
#include<set>
#include<cstring>
using namespace std;
int Count=0;
struct abc
{
string a;
string b;
};
void zh(string m,string &n);
int main()
{
abc x[2000];
while(cin>>x[Count].a)
{
cin>>x[Count].a;
if(x[Count].a=="#") break;
zh(x[Count].a,x[Count].b);
Count++;
}
} void zh(string m,string &n)
{
char q[30];
memset(q,0,sizeof(char)*30);
for(int i=0;i<m.length();i++)
{
q[i]=m[i];
q[i]=tolower(q[i]);
}
sort(q,q+m.size());
n=q;
}

所以悬崖勒马,赶紧选用其它容器。

map/multimap

map/multimap映射容器的元素数据是由一个Key和一个Value成的,key与映照value之间具有一一映照的关系。

map/multimap容器的数据结构也采用红黑树来实现的,map插入元素的键值不允许重复,类似multiset,multimap的key可以重复。比较函数只对元素的key进行比较,元素的各项数据只能通过key检索出来。虽然map与set采用的都是红黑树的结构,但跟set的区别主要是set的一个键值和一个映射数据相等,Key=Value。

map<first,second> a;
//map,会按照first(键值)排序(查找也是);
map/multimap用法

头文件

#include< map >

map成员函数

begin()				 //返回指向 map 头部的迭代器
clear() // 删除所有元素
count() //返回指定元素出现的次数
empty() // 如果 map 为空则返回 true
end() //返回指向 map 末尾的迭代器
erase() // 删除一个元素
find() // 查找一个元素
insert() //插入元素
key_comp() //返回比较元素 key 的函数
lower_bound() //返回键值>=给定元素的第一个位置
max_size() //返回可以容纳的最大元素个数
rbegin() //返回一个指向 map 尾部的逆向迭代器
rend() //返回一个指向 map 头部的逆向迭代器
size() //返回 map 中元素的个数
swap() //交换两个 map
upper_bound() //返回键值>给定元素的第一个位置
value_comp() //返回比较元素 value 的函数

创建map对象

#include<iostream>
#include<map>
using namespace std;
map<int,char>mp;//定义map容器

创建结构体map对象

struct student{
int birth;
string name;
};
int id;
typedef map<int,student> Student;//本语句后所有语句Student==map<int,student>

插入结构体对象

接上文代码

Stduent  a;
cin>>id>>student.birth>>student.name;
a.insert(make_pair(id,student);

通过map容器使得上述解题方式更简便。

2019/2/20训练日记+map/multi map浅谈的更多相关文章

  1. 2019.06.18训练日记(赞FLS)

    之前打了几场比赛,有很多题没做出来,这些题无论是知识点不会,还是说在当时时间和思路的影响下没有做出来,这都应该做出来,至少现在必须做出来,本来打算专心复习,分数高了,好保研,但是想了想如果局限于只把学 ...

  2. LinkedHashSet、Map、Map接口HashMap、Hashtable,TreeSet、TreeMap、如何选择使用集合实现类,Collections工具类

    一.Set接口实现类LinkedHashSet 实现继承图: 1.LinkedHashSet的全面说明 1) LinkedHashSet是 HashSet的子类 2) LinkedHashSet底层是 ...

  3. 浅谈Java中的Set、List、Map的区别(转)

    对JAVA的集合的理解是想对于数组: 数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型),JAVA集合可以存储和操作数目不固定的一组数据. 所有的JAVA集合都位于 java ...

  4. Map生成器 map适配器如今能够使用各种不同的Generator,iterator和常量值的组合来填充Map初始化对象

    Map生成器 map适配器如今能够使用各种不同的Generator,iterator和常量值的组合来填充Map初始化对象 package org.rui.collection2.map; /** * ...

  5. 图像的影像地图超链接,<map>标签浅谈

    在HTML中还可以把图片划分成多个热点区域,每一个热点域链接到不同网页的资源.这种效果的实质是把一幅图片划分为不同的热点区域,再让不同的区域进行超链接.这就是影像地图.要完成地图区域超链接要用到三种标 ...

  6. java中遍历MAP,嵌套map的几种方法

    java中遍历MAP的几种方法 Map<String,String> map=new HashMap<String,String>();    map.put("us ...

  7. arm-none-eabi-g++ -Xlinker -T "../LF3Kmonitor.ld" -Xlinker -Map="Bogota_ICT_V.map"-ram-hosted.ld -mc

    1.arm-none-eabi-g++:是编译ARM裸板用的编译器,不依赖于操作系统. 2.-Xlinker -T "../LF3Kmonitor.ld" -Xlinker -Ma ...

  8. Map接口----Map中嵌套Map

    package cn.good.com; import java.util.HashMap; import java.util.Iterator; import java.util.Map; impo ...

  9. 03-封装BeanUtil工具类(javabean转map和map转javabean对象)

    package com.oa.test; import java.beans.BeanInfo; import java.beans.IntrospectionException; import ja ...

随机推荐

  1. mpvue中使用flyjs全局拦截

    mpvue全局属性设置,在我之前的文章中有介绍,今天想记录的就是怎么和Fly.js结合使用来实现全局拦截功能: 首先我们要安装好Flyio,在mpvue项目中我们用npm下载安装: npm insta ...

  2. Python+Tornado开发微信公众号

    本文已同步到专业技术网站 www.sufaith.com, 该网站专注于前后端开发技术与经验分享, 包含Web开发.Nodejs.Python.Linux.IT资讯等板块. 本教程针对的是已掌握Pyt ...

  3. PHP程序员的能力水平层次(二)

    PHPer的定义:PHPer是以PHP程序编写为主要工作,其他方面略有涉及的一种职业人士,大家所说的程序猿. 对PHPer的等级划分 PHP 爱好者 (半个PHPer) PHP 初学者 (PHP Be ...

  4. 30 HashSet

    /* * 使用HashSet存储字符串并遍历 * * Set的特点: * 无序(存储和读取的顺序可能不一样) * 不允许重复 * 没有整数索引 于List正好相反 */ public class Ha ...

  5. 17-jmeter相关插件介绍

    转--https://www.cnblogs.com/imyalost/p/7751981.html

  6. 广告行业中那些趣事系列9:一网打尽Youtube深度学习推荐系统

    最新最全的文章请关注我的微信公众号:数据拾光者. 摘要:本篇主要分析Youtube深度学习推荐系统,借鉴模型框架以及工程中优秀的解决方案从而应用于实际项目.首先讲了下用户.广告主和抖音这一类视频平台三 ...

  7. tf.nn.relu6 激活函数

    tf.nn.relu6(features,name=None) 计算校正线性6:min(max(features, 0), 6) 参数: features:一个Tensor,类型为float,doub ...

  8. 类 文件 右下角呈现 红色小圆圈,里面有一个J 标记

    intellj(idea) 项目中类 文件 右下角呈现 红色小圆圈,里面有一个J 标记,表明此为 未设置为源文件,没有编译,本来应该是属于源文件的,结果现在没有被标记为源文件,也就没法编译了.

  9. go 基础 结构体

    结构体是类型中带有成员的复合类型.go语言使用结构体和结构体成员来描述真实世界的实体和实体对应的各种属性. go语言中的类型可以被实例化,使用new和&构造类型实例的类型是类型的指针. 结构体 ...

  10. pytorch 中LSTM模型获取最后一层的输出结果,单向或双向

    单向LSTM import torch.nn as nn import torch seq_len = 20 batch_size = 64 embedding_dim = 100 num_embed ...