查看: 147|回复: 0

[源码] 基于map的KV型内存数据库

[复制链接]

0

技术

9

魅力

1

原创

版主

禁止访问

Rank: 7Rank: 7Rank: 7

积分
5899
人气
156
分享
52

最佳新人活跃会员

发表于 2024-2-17 20:07:33 | 显示全部楼层 |阅读模式
这个项目非常简单,没写基于文件的数据库是因为在C++中处理字符串真的好坑啊

显示出来是homo的字符串可能有"homo","homo\n","homo\r\n","homo\b"等等形式……
写了两天放弃了
源码:
[C++] 纯文本查看 复制代码
#include <map>
#include <iostream>
#include <string>

class MemKV {
public:
    MemKV() : kvData_({}) {}
    ~MemKV() {}

    void Set(std::string key, std::string value);
    std::string Get(std::string key);
    void Remove(std::string key);
    void Display();
private:
    std::map<std::string, std::string> kvData_;
};

/**
 * 设置数据
*/
void MemKV::Set(std::string key, std::string value)
{
    kvData_[key] = value;
}

/**
 * 获取key处的value
*/
std::string MemKV::Get(std::string key)
{
    // 检测键值是否在map中
    if (kvData_.find(key) != kvData_.end()) {
        return kvData_[key];
    }
    std::cerr << "[Error] The key " << key << " is not in the map!" << std::endl;
    return "";
}

/**
 * 移除某个键值
*/
void MemKV::Remove(std::string key)
{
    if (kvData_.find(key) != kvData_.end()) {
        kvData_.erase(key);
        return;
    }  
    std::cerr << "[Error] The key " << key << " is not in the map!" << std::endl;
}

/**
 * 回显所有数据
*/
void MemKV::Display()
{
    for (auto data : kvData_) {
        std::cout << "Key:" << data.first << ";Value:" << data.second << std::endl;
    }
}

int main()
{
    MemKV kv;
    kv.Set("site", "home.x64bbs.cn");
    kv.Set("admin", "huang1111");
    kv.Set("users", "1697");
    kv.Set("homo", "114514");

    std::cout << kv.Get("site") << " " << kv.Get("admin") << " " << kv.Get("users") << " " << kv.Get("homo") << std::endl;
    kv.Remove("homo");
    kv.Display();
}

你干嘛~哎哟
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表