gpt4 book ai didi

c++ - 将字符串文件路径转换为唯一标识符

转载 作者:行者123 更新时间:2023-11-28 01:20:38 27 4
gpt4 key购买 nike

将字符串文件路径转换为唯一标识符。

这是我需要转换为唯一 ID 的文件路径类型。(首选 int)

D:\Images\PSSL\2019\Team_Colours\Base_1\Generic.png
D:\Images\Generic.png
D:\Images\Generic\Images\2019\Base.png

从图像到图像的路径会很谨慎

不发布任何代码的政策,因为我有点迷失了如何继续

最佳答案

你的字符串不是任何字符串而是路径,如果相应的文件/目录总是存在你可以使用它们的节点号(struct dirent<中的字段d_ino/)

注意:dirent 在 Linux/Unix/Windows 上可用,如果您因为使用的编译器而没有它,请查看 List of all files inside the folder and its subfolders in Windows


如果文件/目录可能不存在,你可以自己创建一个字典 string -> int,例如:

#include <iostream>
#include <string>
#include <map>
#include <list>

class UI {
public:
UI() : next(1) {}
unsigned search(std::string) const;
unsigned get(std::string);
unsigned forget(std::string);

private:
std::map<std::string, unsigned> m;
std::list<unsigned> free;
unsigned next;
};

unsigned UI::search(std::string s) const {
std::map<std::string, unsigned>::const_iterator it = m.find(s);

return (it == m.end()) ? 0 : it->second;
}

unsigned UI::get(std::string s) {
std::map<std::string, unsigned>::const_iterator it = m.find(s);

if (it != m.end())
return it->second;

unsigned r;

if (!free.empty()) {
r = free.front();
free.pop_front();
}
else
r = next++;

m[s] = r;
return r;
}

unsigned UI::forget(std::string s) {
std::map<std::string, unsigned>::const_iterator it = m.find(s);

if (it == m.end())
return 0;

unsigned r = it->second;

m.erase(it);

if (r == (next - 1))
next -= 1;
else
free.push_back(r);

return r;
}

int main(void)
{
UI ui;

std::cout << "aze " << ui.search("aze") << std::endl;
std::cout << "aze " << ui.get("aze") << std::endl;
std::cout << "qsd " << ui.get("qsd") << std::endl;
ui.forget("aze");
std::cout << "aze " << ui.search("aze") << std::endl;
std::cout << "wxc " << ui.get("wxc") << std::endl;
return 0;
}

编译和执行:

pi@raspberrypi:/tmp $ g++ -pedantic -Wall -Wextra c.cc
pi@raspberrypi:/tmp $ ./a.out
aze 0
aze 1
qsd 2
aze 0
wxc 1
pi@raspberrypi:/tmp $

注释:

  • 当您输入新字符串时,我不会检查是否已使用 unsigned int 的所有可能值,在此之前您会遇到内存问题,或者使用 64b未签名以确保 ;-)

  • 一个字符串的ID当然是唯一的,但依赖于历史,一个哈希不依赖于一个历史,但多个字符串可能具有相同的哈希

关于c++ - 将字符串文件路径转换为唯一标识符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56454588/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com