基于STL的字典生成模块-模拟搜索引擎算法的尝试
该课题来源于UVA中Searching the Web的题目:https://vjudge.net/problem/UVA-1597
按照题目的说法,我对按照特定格式输入的文章中的词语合成字典,以满足后期的快速查找。
针对于字典的合成途径,我利用了STL中的map与set的嵌套形成了一种特定的数据结构来解析文章中的单词
#include<map>
#include<iostream>
#include<set>
#include<algorithm>
#include<string>
#include<cctype>
#include<sstream>
using namespace std;
struct newpair
{
int article;
int line;
bool operator<(const newpair b) const
{
return this->line < b.line;
}
};
typedef map<string,set<newpair> > BIGMAP;
typedef set<newpair>::iterator SET_pair_ITER;
typedef map<string,set<newpair> >::iterator BIGMAP_iter; BIGMAP maper;
string psd[];
int maxline; int checkmaper()
{
BIGMAP_iter it;
for(it=maper.begin();it!=maper.end();++it)
{
cout<<(it->first);//string-type
set<newpair> cyc;
cyc=it->second;//set<newpair>-type
for(SET_pair_ITER iter=cyc.begin();iter!=cyc.end();++iter)
{
newpair ctn=*iter;
cout<<" article "<<ctn.article<<" line "<<ctn.line<<endl;
}
}
return ;
} void buildmaper(string aim,int articlenum,int linenum)
{
newpair m;
m.article=articlenum;
m.line=linenum;
maper[aim].insert(m);
} int readin()
{
int n;
char c;//input the \n
cin>>n>>c;
int cur=;
for(int i=;i<n;cur++)
{
getline(cin,psd[cur]);
if((int)psd[cur].find("***")!=-){i++;continue;}//the next article
for(string::iterator it=psd[cur].begin();it!=psd[cur].end();++it)
{
if(isalpha(*it)) *it=tolower(*it);
else *it=' ';
}
stringstream ss(psd[cur]);
string chr;
while(ss>>chr) buildmaper(chr,i,cur);
}
return cur;
} int main()
{
freopen("input.txt","r",stdin);
freopen("ans.txt","w",stdout);
maxline=readin();
checkmaper();
return ;
}
以上代码涉及了较多C++知识与个别底层知识,下面进行列举:
1、stringstream常用操作
2、基本STL之map与set
3、结构体中的运算符重载
4、迭代器的操作
5、RB树实现map与set的基本原理
有关详细的实现方法请参照我的其它博客和上述代码。
在上述代码中唯一一个容易出现bug的位置是set的实现:由于set对输入的元素需要进行排序,所以必须在newpair结构体中重载<(operator)。
下面是运行图片:
输入如下:
one repeat repeat repeat
A manufacturer, importer, or seller of
digital media devices may not () sell,
or offer for sale, in interstate commerce,
or () cause to be transported in, or in a
manner affecting, interstate commerce,
a digital media device unless the device
includes and utilizes standard security
technologies that adhere to the security
system standards.
**********
one two repeat repeat repeat repeat
Of course, Lisa did not necessarily
intend to read his books. She might
want the computer only to write her
midterm. But Dan knew she came from
a middle-class family and could hardly
afford the tuition, let alone her reading
fees. Books might be the only way she
could graduate
**********
one two three repeat repeat repeat repeat repeat
Research in analysis (i.e., the evaluation
of the strengths and weaknesses of
computer system) is essential to the
development of effective security, both
for works protected by copyright law
and for information in general. Such
research can progress only through the
open publication and exchange of
complete scientific results
**********
one two three four repeat repeat repeat repeat repeat repeat
I am very very very happy!
What about you?
**********
输出如下:
a article line
article line
article line
article line
about article line
adhere article line
affecting article line
afford article line
alone article line
am article line
analysis article line
and article line
article line
article line
article line
article line
be article line
article line
books article line
article line
both article line
but article line
by article line
came article line
can article line
cause article line
class article line
commerce article line
article line
complete article line
computer article line
article line
copyright article line
could article line
article line
course article line
dan article line
development article line
device article line
devices article line
did article line
digital article line
article line
e article line
effective article line
essential article line
evaluation article line
exchange article line
family article line
fees article line
for article line
article line
article line
four article line
from article line
general article line
graduate article line
happy article line
hardly article line
her article line
article line 17 其余略。。。。。。。。。。
OK
基于STL的字典生成模块-模拟搜索引擎算法的尝试的更多相关文章
- C++ 基于STL的演讲比赛流程管理系统(sort算法+小型算法(accumulate)+内建函数对象+string字符串拼接+字符串截取+多个容器基础操作+与用户交互+文件的读写+保存+重建+整体文件数据的清空)
1 /* 2 比赛规则: 3 学校举行一演讲比赛,共12个人参加,比赛两轮,第一轮为淘汰赛 第二轮为决赛 4 每名选手都有对应的编号:如10001~10012 5 比赛方式:分组比赛 每组6人 6 第 ...
- 基于STL优先队列和邻接表的dijkstra算法
首先说下STL优先队列的局限性,那就是只提供入队.出队.取得队首元素的值的功能,而dijkstra算法的堆优化需要能够随机访问队列中某个节点(来更新源点节点的最短距离). 看似可以用vector配合m ...
- python 基于 wordcloud + jieba + matplotlib 生成词云
词云 词云是啥?词云突出一个数据可视化,酷炫.以前以为很复杂,不想python已经有成熟的工具来做词云.而我们要做的就是准备关键词数据,挑一款字体,挑一张模板图片,非常非常无脑.准备好了吗,快跟我一起 ...
- 基于FPGA的VGA可移植模块终极设计【转】
本文转载自:http://www.cnblogs.com/lueguo/p/3373643.html 略过天涯 基于FPGA的VGA可移植模块终极设计 一.VGA的诱惑 首先,VGA的驱动,这事, ...
- SQL Server2005+、MySQL、Oracle 数据库字典生成工具
之前找的数据库字典生成工具基本上都依赖于 Office Com 组件,在不安装 Office的情况下无法使用.怒,于是自己用C# 写了一个. 特征如下: 一.支持的数据库 MS ...
- [FUZZ]文件上传fuzz字典生成脚本—使用方法
文件上传fuzz字典生成脚本-使用方法 原作者:c0ny1 项目地址:https://github.com/c0ny1/upload-fuzz-dic-builder 项目预览效果图: 帮助手册: 脚 ...
- PJzhang:crunch,一个很好的字典生成工具
猫宁!!! 之前收集子域名的时候使用过子域名挖掘机这个windows软件,查看了它所使用的字典,基本上是小写字母数字1-4位的一个合集. 36+36*36+36*36*36+36*36*36*36 ...
- 文件上传漏洞fuzz字典生成脚本小工具分享
前言 学习xss的时候翻阅资料发现了一个文件上传漏洞fuzz字典生成脚本小工具,试了试还不错,分享一下 配置 需要python2环境 工具地址:https://github.com/c0ny1/upl ...
- 【vue】生成接口模拟数据
目录 方案一:自定义模拟数据 Step1 创建json文件 Step2 在 vue.config.js 中配置 Step3 在组件中使用 (方式一) Step3 封装api (方式二) Step4 在 ...
随机推荐
- HTML,Css,JavaScript之间的关系
简述HTML,Css,JavaScript 网页设计思路是把网页分成三个层次,即:结构层(HTML).表示层(CSS).行为层(Javascript). 1.HTML(超文本标记语言 Hyper Te ...
- [CentOS7]安装ODBC Driver 17 for SQL Server
Python 通过pyodbc 连接SQL Server 数据库驱动 安装环境 cat /etc/redhat-release CentOS Linux release (Core) 微软官网 htt ...
- Spring-cloud微服务实战【九】:分布式配置中心config
回忆一下,在前面的文章中,我们使用了spring cloud eureka/ribbon/feign/hystrix/zuul搭建了一个完整的微服务系统,不管是队内还是对外都已经比较完善了,那我们 ...
- 物理机安装ESXI6.7提示No Network Adapters的解决方案
下载好ESXI6.7.iso镜像,写入U盘后,提示No Network Adapters,找不到网卡驱动. 解决办法:需要重新封装ESXI,将对应的网卡驱动嵌入进来. 1.先下载VMware-Powe ...
- 本地与github建立连接,本地代码上传到github
1,已有github账号 2,本地已经安装git 3,本地创建ssh-key 在git bash中输入后直接回车. $ ssh-keygen -t rsa -C "your_email@yo ...
- html语义化的意义
易于用户阅读,样式丢失的时候能让页面呈现清晰的结构. 有利于SEO,搜索引擎根据标签来确定上下文和各个关键字的权重. 方便其他设备解析,如盲人阅读器根据语义渲染网页 有利于开发和维护,语义化更具可读性 ...
- 分布式系统的CAP定理
CAP定理: 在一个分布式系统中,Consistency(数据一致性). Availability(服务可用性).Partition tolerance(分区容错性),三者不可兼得. 一致性(Cons ...
- Android Gradle报错 (Error:No such property: GradleVersion for class: JetGradlePlugin) 的原因与解决
Error:No such property: GradleVersion for class: JetGradlePlugin 错误原因:IDE 版本(GradlePlugin)和 Gradle 版 ...
- 推荐一款疫情期间适合在家办公的远程工具,仅需IP和密码轻松实现远程管理
这段时间,受疫情影响,很多企业都开启了居家办公模式.但疫情突发,大多数人的办公资料没有拷贝打包,对于居家办公的人,尤其是运维人员来说,很难完成顺利完成工作. 像向日葵.teamviewer之类的远程软 ...
- java Reflection(反射)基础知识讲解
原文链接:小ben马的java Reflection(反射)基础知识讲解 1.获取Class对象的方式 1.1)使用 "Class#forName" public static C ...