gpt4 book ai didi

c++ - 将 std::map 写入/读取到二进制文件需要运算符

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

我想将 std::map 写入文件并读回。我正在寻找一种相当简单和极简主义的方式来做到这一点,而无需提升。我发现像这里这样的 vector 是可行的 Reading and writing a std::vector into a file correctly with iterators

我发现了这个问题,因为它与我想做的事情有关,除了我正在寻找二进制替代方案。

reading a file of key-value pairs in to a std::map

最佳答案

对于不涉及动态内存(实际上是指针)的类型

template<size_t N>
struct Serial
{
char bin[N];
friend ostream& operator<<(ostream& os, const Serial& s)
{
for(auto c : bin)
os << c;
return os;
}
friend istream& operator>>(istream& is, Serial& s)
{
for(auto& c : bin)
is >> c;
return is;
}
};

struct Key
{
static constexpr size_t size = sizeof(Key);
Key(const Serial<size>& s) { memcpy(this, s.bin, size); }
Serial<size>& serialize() { return *reinterpret_cast<Serial<size>*>(this); }
};

struct Value
{
static constexpr size_t size = sizeof(Value);
Key(const Serial<size>& s) { memcpy(this, s.bin, size); }
Serial<size>& serialize() { return *reinterpret_cast<Serial<size>*>(this); }
};

void write(ostream& os, const std::map<Key, Value>& m)
{
for(const auto& p : m)
os << p.first.serialize() << p.second.serialize();
}

void read(istream& is, std::map<Key, Value>& m)
{
Serial<Key::size> k;
Serial<Value::size> v;
while(is >> k >> v)
m[k] = v;
}

对于涉及动态内存(指针)的类型,解决方案将完全取决于它们的工作方式,无法提供神奇的解决方案。

你有没有考虑过JSON

关于c++ - 将 std::map 写入/读取到二进制文件需要运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43961674/

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