该课题来源于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的字典生成模块-模拟搜索引擎算法的尝试的更多相关文章

  1. C++ 基于STL的演讲比赛流程管理系统(sort算法+小型算法(accumulate)+内建函数对象+string字符串拼接+字符串截取+多个容器基础操作+与用户交互+文件的读写+保存+重建+整体文件数据的清空)

    1 /* 2 比赛规则: 3 学校举行一演讲比赛,共12个人参加,比赛两轮,第一轮为淘汰赛 第二轮为决赛 4 每名选手都有对应的编号:如10001~10012 5 比赛方式:分组比赛 每组6人 6 第 ...

  2. 基于STL优先队列和邻接表的dijkstra算法

    首先说下STL优先队列的局限性,那就是只提供入队.出队.取得队首元素的值的功能,而dijkstra算法的堆优化需要能够随机访问队列中某个节点(来更新源点节点的最短距离). 看似可以用vector配合m ...

  3. python 基于 wordcloud + jieba + matplotlib 生成词云

    词云 词云是啥?词云突出一个数据可视化,酷炫.以前以为很复杂,不想python已经有成熟的工具来做词云.而我们要做的就是准备关键词数据,挑一款字体,挑一张模板图片,非常非常无脑.准备好了吗,快跟我一起 ...

  4. 基于FPGA的VGA可移植模块终极设计【转】

    本文转载自:http://www.cnblogs.com/lueguo/p/3373643.html 略过天涯   基于FPGA的VGA可移植模块终极设计 一.VGA的诱惑 首先,VGA的驱动,这事, ...

  5. SQL Server2005+、MySQL、Oracle 数据库字典生成工具

    之前找的数据库字典生成工具基本上都依赖于 Office Com 组件,在不安装 Office的情况下无法使用.怒,于是自己用C# 写了一个.     特征如下:         一.支持的数据库 MS ...

  6. [FUZZ]文件上传fuzz字典生成脚本—使用方法

    文件上传fuzz字典生成脚本-使用方法 原作者:c0ny1 项目地址:https://github.com/c0ny1/upload-fuzz-dic-builder 项目预览效果图: 帮助手册: 脚 ...

  7. PJzhang:crunch,一个很好的字典生成工具

    猫宁!!! 之前收集子域名的时候使用过子域名挖掘机这个windows软件,查看了它所使用的字典,基本上是小写字母数字1-4位的一个合集.   36+36*36+36*36*36+36*36*36*36 ...

  8. 文件上传漏洞fuzz字典生成脚本小工具分享

    前言 学习xss的时候翻阅资料发现了一个文件上传漏洞fuzz字典生成脚本小工具,试了试还不错,分享一下 配置 需要python2环境 工具地址:https://github.com/c0ny1/upl ...

  9. 【vue】生成接口模拟数据

    目录 方案一:自定义模拟数据 Step1 创建json文件 Step2 在 vue.config.js 中配置 Step3 在组件中使用 (方式一) Step3 封装api (方式二) Step4 在 ...

随机推荐

  1. 第3章 JDK并发包(一)

    3.1 多线程的团队协作:同步控制 3.1.1 synchronized的功能扩展:重入锁 重入锁可以完全替代synchronized关键字. 重入锁使用java.util.concurrent.lo ...

  2. Go语言实现:【剑指offer】对称的二叉树

    该题目来源于牛客网<剑指offer>专题. 请实现一个函数,用来判断一颗二叉树是不是对称的.注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的. Go语言实现: 方法一:递归 / ...

  3. 一个"/"引发的惨案

    今天行云流水写了一个接口,正想着写完就睡觉了,结果访问的时候一直报错404,找不到路径,我反复检查了好久,确定路径名字没写错,百思不得其解,瞬间有想砸电脑的冲动,于是准备洗洗睡了,明天再搞 洗玩脚回到 ...

  4. centos7 安装 iRedmail 后 给nginx添加虚拟主机

    iRedmail安装参考官方文档和 https://ywnz.com/linuxyffq/4563.html 准备工作 更新操作系统 yum update -y 安装必要组件 yum install ...

  5. spark sql 查询hive表并写入到PG中

    import java.sql.DriverManager import java.util.Properties import com.zhaopin.tools.{DateUtils, TextU ...

  6. 【转载】SPI总线和I2C总线的异同点

    来源:https://blog.csdn.net/lishun1422840684/article/details/77776763 总结的简单.明了.适用! 一:SPI接口的全称是"Ser ...

  7. vue插件介绍

    1.插件和组件的关系 在没有封装组件之前,如果不使用第三方插件,那么很多情况下我们会编写几个常用的组件来提供给页面使用,如Alert/Loading组件,而你可能需要在很多页面中引入并且通过compo ...

  8. 在Django中连接MySQL数据库(Python3)

    我的环境:      python3.6,      Django2.1.5,      MySQL8.0.15,      win10,      PyCharm, 要求:已经安装了MySQL数据库 ...

  9. asp.net core 3.1 入口:Program.cs中的Main函数

    本文分析Program.cs 中Main()函数中代码的运行顺序分析asp.net core程序的启动,重点不是剖析源码,而是理清程序开始时执行的顺序.到底用了哪些实例,哪些法方. asp.net c ...

  10. java设计模式1——单例模式

    java设计模式1--单例模式 1.单例模式介绍 1.1.核心作用:保证一个类只有一个实例,并且提供一个访问该实例的全局访问点 1.2.常见场景 1.3.单例模式的优点 1.4.常见的五种单例模式实现 ...