Linux/C/C++ TrieTree字典树实现关键词过滤

本文介绍了利用C++实现TrieTree字典树进行关键词过滤的方法,通过字典树结构优化搜索效率,避免了暴力遍历。文章详细讲解了字典树的构建原理、代码实现,并展示了代码效果,强调了在文件过滤和推荐算法中的应用优势。
摘要由CSDN通过智能技术生成

1.main.cpp

#include <iostream>
#include "othertrie.hpp"

using namespace mytrie;


int main(int argc, char *argv[])
{
   
    std::string text = "dfjosjdfoiasjfoiasjdofijasiodfjsdoidfjasodifjoasidj"\
    "fjoisjdfoijsdofijasoidfjoiasffidsjdfoiasjdfohnasoguhw9jqijrojiowdjimeoiqjwoeij"\
    "osdjfoisjfoijsdifjijijweiiejiojtgijerogjonvkoijqowijeqijofjeorijfoiewrjfo"\
    "jofijaosdifjo;jfoiofidfdewroqiuuqoiurijhdfdkvlknvjajffopq[roeoirjoiwejrowe"\
    "joisjdfoisjdfoijsodfijosffidijoweijoiruoqiueriuqtihodfhgodfjkskdkljsldjnxsdkfjlk"\
    "soidfjoijdfoijroeiwjfoiiijqijeoipeirpqet[ofjoeijfoijeoiiwejfoijweoifjwoejfoi";
    std::string key1 = "fjoi";
    std::string key2 = "sffid";
    std::string key3 = "fidfd";
    std::string key4 = "jdo";
    std::string key5 = "dfd";
    std::string key6 = "ssdfsf";
    std::string key7 = "---------------------";

    // 创建trie字典树
    basic_trie<char> *finder = new basic_trie<char>;

    finder->insert(key1);
    finder->insert(key2);
    finder->insert(key3);
    finder->insert(key4);
    finder->insert(key5);
    finder->insert(key6);
    finder->insert(key7);

    // 当插入关键词为原关键词的子串, 形成包含映射, 如 "abcdf" 和 "bcd"
    finder->settingfailure();

    // 解析文章
    /* 数据结构
    class result{
    public:
        std::basic_string<CharType> sentence;
        unsigned int start;
        unsigned int fin;
    public:
            explicit result(){
            start = 0;
            fin = 0;
        }
        explicit result(const std::basic_string<CharType>& sentence, unsigned int start, unsigned int fin):
        sentence(sentence), start(start), fin(fin){}
    };
    */

    // 验证结果
    std::vector<result<char>> res = finder->search(text);
    for (auto i = 0; i < res.size(); ++i)
    {
   
        std::cout << res[i].sentence << '\n';
        std::cout << "start==" << res[i].start << ",    ";
        std::cout << "fin==" << res[i].fin << '\n';
        std::cout << "=========================" << '\n';
    }

    return 0;
}

2.othertrie.cpp

#ifndef OTHERTRIE_HPP
#define OTHERTRIE_HPP

#include <typeinfo>
#include <memory>
#include <string>
#include <map></
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值