地图和文件 C++

我希望 mymap 有 3 个元素的容量,例如,如果我不断插入将删除最后一个输入的元素。 插入元素并写入文件

typename map <string,pair<T,int> > ::iterator i = mymap.find(key);

file.write(reinterpret_cast<const char*>(&i),sizeof(i));

这有效,但是当我从 mymap 中删除一个元素时,它也会从文件中删除。

i = mymap.find(last.first);
mymap.erase(i);

为什么?

Arbot 回答:地图和文件 C++

std::map<> 对象管理的数据没有直接嵌入到 std::map<> 对象中 - 相反,它是动态分配的,std::map<> 对象包含指向部分数据的指针,因此它可以开始搜索。当您 file.write 时,您只是写出管理对象而不是节点 - 这将永远不会持久化数据。之后:

std::map<std::string,std::pair<T,int>> mymap;
mymap.emplace("one",{1.0,1});
mymap.emplace("two",{2.0,2});

你可以想象正在使用的内存区域和它们之间的指针是这样的:

mymap:{size=2; p_root_=&MMM; p_least_=&AAA; p_greatest_=&ZZZ;}
                          |             /                /
...on the heap...      +--|-------------        ---------
                       |  v                    /
                       |  MMM                 /
                       v /   \               /
                       ZZZ   AAA<-----------/

如果您想拥有一个记住最后 3 个值的容器,请考虑使用循环缓冲区(或者如果您不太关心性能 - 甚至更容易,std::deque<>),尽管您将必须存储键和值并手动搜索 3 个值以找到键的匹配项。

本文链接:https://www.f2er.com/4371.html

大家都在问