0
부스트 라이브러리를 사용하여 std :: map을 직렬화하여 파일에 저장할 수 있도록하려고합니다. 그러나 나는 그렇게 이상한 행동을하고있다 (나는 짐작한다). 그래서 여기 내 코드입니다 :부스트 라이브러리를 사용한 직렬화
#include <map>
#include <fstream>
#include <iostream>
#include <bitset>
#include <boost/serialization/map.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/archive/text_oarchive.hpp>
std::map<int,int> map = {{65,2}, {69,1}, {75,1} ,{77,1}, {82,1}, {84,2}, {89,2}};
void saveMapToFile(std::ofstream& f);
int main()
{
std::ofstream f("test.txt", std::ios::binary);
saveMapToFile(f);
std::cout << "position: " << f.tellp() << std::endl;
}
void saveMapToFile(std::ofstream& f)
{
std::cout << "position : " << f.tellp() << std::endl;
boost::archive::text_oarchive oarch(f);
std::cout << "position : " << f.tellp() << std::endl;
oarch << map;
std::cout << "position : " << f.tellp() << std::endl;
}
는 그리고 여기에 위의 코드의 출력 :
position : 0
position : 28
position : 75
position: 76
그래서 누군가가 여기서 무슨 일이 일어나고 있는지 나에게 설명 할 수는? 다른 위치에지도를 삽입 한 후 위치가 왜 (기능상)? 추가 opperations, 아직 그 포인터가 한 바이트 더 나아 간다 ... 나는 뭔가를 놓친 건가? 사전에 도움을 주셔서 감사합니다.
그래,하지만 이해가 안되는 이유는 모르겠다. 내가 그 파일을지도에있는 다른 데이터를 저장하고 그 문제가 있음을 의미합니다. 저장은 어디에서 실행해야합니까? ''saveMapToFile()'''함수에서 다른 데이터를 저장하면 75 번째 바이트부터 시작하고 765 번째 바이트는 외부에서 수행합니다. 다음 읽기 -지도를 읽은 후 포인터 위치는 항상 75 번째 바이트로 이동하지만 다른 데이터는 76 번째 바이트부터 시작할 수 있으므로 그 순간에는 데이터 읽기를 시작하거나 다음 바이트로 이동해야합니다. 그리고 나서 읽으십시오. 아마 내가 이해할 수없는 것입니다. –
저장 기능에 스트림이 아닌 아카이브를 전달해야합니다. – sehe
[이 답변] (https://stackoverflow.com/a/28395831/85371)의 맨 아래 링크를 참조하십시오. [다형성 텍스트 아카이브보다 많은 것을 출력] (http://stackoverflow.com/questions/) 27422557/more-more-a-polymorphic-text-archive/27424381 # 27424381) 및 [스트림은 아카이브가 아닙니다] (http://www.boost.org/doc/libs/1_51_0/libs/serialization/) 의사/) – sehe