在c ++“标准库”中,是否有任何“关联”(即“键值”)容器/数据结构能够按插入顺序保持顺序?
我已经看到了几个关于此的主题,但是,似乎大多数在 C++11 之前。
有些人建议使用“boost::multi_index”,但如果可能的话,我会“宁愿”使用标准容器/结构。
我看到 C++11 有几个显然是“无序”的关联容器:link。
这些中的任何一个,以某种方式,“可配置”,以便它们仅按插入顺序排序?
谢谢!
C
在c ++“标准库”中,是否有任何“关联”(即“键值”)容器/数据结构能够按插入顺序保持顺序?
我已经看到了几个关于此的主题,但是,似乎大多数在 C++11 之前。
有些人建议使用“boost::multi_index”,但如果可能的话,我会“宁愿”使用标准容器/结构。
我看到 C++11 有几个显然是“无序”的关联容器:link。
这些中的任何一个,以某种方式,“可配置”,以便它们仅按插入顺序排序?
谢谢!
C
不。在无序映射中,也没有按照插入顺序存储。
您可以使用矢量来跟踪密钥!
不; 这种能力显然是以性能为名牺牲的。
需要在包括重新散列在内的操作中保留等效项的顺序,但无法指定原始顺序。理论上,您可以std::rotate
在每次插入后使用或类似方法将对象排列为所需的顺序。显然是不切实际的,但事实证明能力不足有点武断。
您最好的选择是将子序列保存在内部容器中。您可以使用迭代器适配器来迭代这样一个“深”容器,就好像它是一个序列一样。这样的实用程序可能可以在 Boost 中找到。