我有一个存储<int, char *>
的映射表。现在我想按照它们插入的顺序检索元素。但是std :: map
返回按键排序的元素。这是否可能?
我有一个存储<int, char *>
的映射表。现在我想按照它们插入的顺序检索元素。但是std :: map
返回按键排序的元素。这是否可能?
int
的顺序(也就是说,你只需要插入顺序,而不关心常规键访问),那么将其更改为一个vector<pair<int, char *>>
即可,按照定义它是按插入顺序排序的(假设你只在末尾插入)。Boost.MultiIndex
或类似工具。但你可能需要保持单独的变量,它只会向上计数(成为稳定计数器),因为如果您从map中删除了任何内容,您可以仅在您从未从map中删除任何内容时使用.size()+1
作为新的“插入时间键”。如果您仍然想要基于键值的访问,可以使用一个映射(map),以及一个按插入顺序包含所有键的向量(vector)。但如果后续需要删除元素,则效率会变低。
您可以将链接列表结构构建到值中:值不再是char*,而是由char*和先前插入的和后续插入的键组成的结构体;另外一个变量存储列表的头和尾。您需要自己进行簿记,但它可以提供高效的插入和删除。这或多或少是boost.multiindex所做的。
**最好存储映射迭代器,但这会导致循环定义问题。