我有一些带有整数索引的数据.我不断生成需要添加到我拥有的数据集合中的新数据,按索引排序,同时我希望能够轻松地开始数据并迭代它.这听起来像std :: multimap正是我需要的.
但是,我还需要按照插入顺序保存具有相同索引的数据,在这种情况下,这意味着当我遍历数据时,我会在之后的数据之前得到早期数据.
multimap会这样做吗?
我没有找到任何保证,这是这种情况.在sgi手册中,我没有看到是否提及.我在gcc 4.3.4实现上尝试了它,对于一些有限的测试用例似乎是正确的,但当然我想知道标准是否要求这个并且我可以依赖这个事实.
编辑:为了更清楚地回答一些答案,我希望数据首先按(非唯一)索引排序,然后按插入时间排序.我原本希望第二部分可以免费使用multimap,但似乎没有.
bit*_*ask 38
似乎新标准(C++ 11)改变了这个:
键与其等效的键值对的顺序是插入的顺序,并且不会改变.[cppreference]
我对使用它犹豫不决,因为在将标准库修改为符合C++ 11时,这似乎是一个容易被忽视的细节,如果编译器的库无法正确实现,那么这种细节会无声地导致错误.
除非我遗漏了某些内容,否则该标准不提供任何此类保证.
最明显的解决方法是将序列号作为辅助密钥.例如,在您的类中包含一个静态无符号long,并且每次创建要在多图中插入的对象时,将其当前值放入对象中,然后递增它.在对象的比较函数中,如果您当前用作关键字的数据相等,则使用该计数器作为排序的决定因素.请注意,在这种情况下,每个键都是唯一的,因此您可以使用地图而不是多地图.