我想使用以下代码将共享向量插入到共享地图中:
managed_shared_memory segment(create_only ,"MySharedMemory" ,65536);
typedef allocator<int, managed_shared_memory::segment_manager> vecAllocator;
typedef vector<int, vecAllocator> vec;
typedef std::pair<int, vec* > ValueType;
typedef allocator<ValueType, managed_shared_memory::segment_manager> ShmemAllocator;
typedef multimap<int, vec*, std::less<int>, ShmemAllocator> MyMap;
ShmemAllocator alloc_inst (segment.get_segment_manager());
vecAllocator vectorallocator (segment.get_segment_manager());
MyMap *mymap = segment.construct<MyMap>("MyMap")(std::less<int>(),alloc_inst);
vec *myvec = segment.construct<vec>("myvec")(vectorallocator);
vec *myvec1 = segment.construct<vec>("myvec1")(vectorallocator);
myvec->push_back(10);
myvec->push_back(9);
myvec->push_back(8);
myvec1->push_back(987);
myvec1->push_back(123);
myvec1->push_back(456);
for(int i = 0; i < 6; ++i){
for(int j = 0; j<6; j++)
mymap->insert(std::pair<int, vec*>(i, myvec));
}
for(int i = 0; i < 6; ++i){
for(int j = 0; j<6; j++)
mymap->insert(std::pair<int, vec*>(i, myvec1));
}
代码工作..但我想要做的是构造一个没有名称的向量。这是做这样的事情
vec *myvec = segment.construct<vec>(vectorallocator);
vec *myvec1 = segment.construct<vec>(vectorallocator);
所以,如果我把它放在一个循环中,并且没有问题,每个循环以不同的方式命名它们。有办法吗? 或者至少是否有一种自动方式来为每个循环命名它们?
答案 0 :(得分:0)
因为我不需要矢量的名称,这就是我所做的。
unsigned int seconds;
srand ( time(NULL) );
seconds = rand() % 1000000;
std::stringstream buf;
buf << seconds;
vec *myvec = segment.construct<vec>((buf.str()).c_str())(vectorallocator);
我现在可以拥有大量的vec *,而不必考虑名称......:)
这只是一个微不足道的答案。
答案 1 :(得分:0)
我之前的回答是STUPID ..所以这是正确的答案 我们必须使用匿名实例来获得我想要的东西。它是使用
完成的vec *myvec = segment.construct<vec>(anonymous_instance)(vectorallocator);
它还解释了其他一些好的功能。