【发布时间】:2010-12-26 08:29:44
【问题描述】:
我有以下代码:
#include <iostream>
#include "boost/unordered_map.hpp"
using namespace std;
using namespace boost;
int main()
{
typedef unordered_map<int, int> Map;
typedef Map::const_iterator It;
Map m;
m[11] = 0;
m[0] = 1;
m[21] = 2;
for (It it (m.begin()); it!=m.end(); ++it)
cout << it->first << " " << it->second << endl;
return 0;
}
但是,我正在寻找保留顺序的东西,以便稍后我可以按照插入元素的相同顺序迭代元素。在我的电脑上,上面的代码不保留订单,并打印以下内容:
0 1
11 0
21 2
我想也许我可以使用boost::multi_index_container
typedef multi_index_container<
int,
indexed_by<
hashed_unique<identity<int> >,
sequenced<>
>
> Map;
谁能告诉我如何使用这个容器(或任何其他合适的容器)实现我的原始代码,以便迭代器遵循插入顺序?
【问题讨论】:
-
维护一个单独的列表来跟踪插入顺序是不可能的吗?
-
很遗憾这个问题被关闭了,因为
std::map需要 O(n lg n) 的构建时间,所以它不能在 O(n) 时替代std::unordered_map。
标签: c++ unordered-map html-lists multi-index