C++ 哪个STL类用于Rand In First Out缓冲区

C++ 哪个STL类用于Rand In First Out缓冲区,c++,stl,buffer,stdmap,C++,Stl,Buffer,Stdmap,我目前有一个大型集群(50多台计算机)处理工作包。所有这些工作包的结果由控制器计算机收集 因此,假设数据以半随机方式到达,并逐渐增长: 0,2,3,8,7,1,4,9,10,11,6, ... 然后我必须按顺序将数据转储到文件中。由于工作包是100M+,我会在缓冲区中准备好下一个工作包后立即将其转储 我实际上是在使用一个std::map来实现这个“随机输入第一输出”,例如: std::map<int, DataStruct> buffer; long long next_work

我目前有一个大型集群(50多台计算机)处理工作包。所有这些工作包的结果由控制器计算机收集

因此,假设数据以半随机方式到达,并逐渐增长:

0,2,3,8,7,1,4,9,10,11,6, ...
然后我必须按顺序将数据转储到文件中。由于工作包是100M+,我会在缓冲区中准备好下一个工作包后立即将其转储

我实际上是在使用一个
std::map
来实现这个“随机输入第一输出”,例如:

std::map<int, DataStruct> buffer;

long long next_work = 0;
while(next_work != 100000000){
    fill_buffer(buffer); //This method fills the buffer from the processing elements

    if(buffer.find(next_work) != buffer.end()){
        dump_to_file(buffer[next_work]); // Dumps it to file
        buffer.erase(next_work++);
    }
};
std::map缓冲区;
长下一步工作=0;
while(下一个工作!=100000000){
fill_buffer(buffer);//此方法从处理元素填充缓冲区
if(buffer.find(下一步工作)!=buffer.end(){
dump_to_file(buffer[next_work]);//将其转储到文件
擦除(下一步工作++);
}
};
该缓冲区有时(由于网络延迟、PC延迟、断开连接等原因)会增长到100000+个元素,这会降低操作速度。所以,我想知道STL是否有一个更好的类用于这种类型的操作

这里使用
std::map
合适吗?


有更好的/CPU效率方法吗?(我真的不在乎它是否有内存效率)

因为在缓冲区中没有比
next\u work
更少的作业,所以地图只能包含这样的元素作为它的第一个元素。您可以改为使用
begin()
访问迭代器,以恒定时间获得第一个元素(然后测试它是否是您想要的元素)。但仍在减速的是插入,它在缓冲区的当前大小中仍然是对数的

另一种关联数据结构是哈希映射。它支持预期的固定时间插入和查找。它不是按键排序的,但是因为您只需要查找一个精确的键,所以这不会是一个问题

如果您的编译器支持C++11(并且您不需要支持C++11之前的编译器),则存在。也许仅仅替换类就可以解决所有问题。可能您需要调整对数据结构的其他访问,而这些访问在截取的代码中没有显示,即我们不知道如何在
fill\u buffer
中填充数据结构


对于C++03,您可以试试。

谢谢,我不知道std:unordered_map,是的,我的编译器支持它(虽然不是完全支持C++11)