1
15
如果您想要std::map的属性,为什么不使用std::map?它将比遍历每个元素更有效率。 |
2
11
结帐 Boost.MultiIndex ,它比使用带有指针的多个容器更简单、更高效。 |
3
9
如果您想要一个容器,其中:
1) 插入顺序不重要(这是一个列表)
然后使用 标准::设置<> |
4
3
使用 std::find 或 std::find_if 在某个迭代器范围中查找某个值的第一个位置。 |
5
3
如果您担心搜索时间,但希望保持顺序,则可以保留两个包含相同数据的容器。 |
6
2
std::list的目的是不查找/搜索。这就是std::map的用途。列表非常适合插入、提取、移动和使用排序算法。如果你只需要存储数据并随机找到它,那么使用地图。如果您想构建数据存储的方式和位置,请使用列表。 |
7
1
选择1
听起来你想要的是单个元素的映射,而不是成对元素的映射。使用
选择2
如果您想要的是提供对最小或最大元素快速访问的容器,则可以使用
选择3如果您想要的只是一个包含对的列表,那么就声明它为:
这只会给出一个链接列表,该列表具有任何其他链接列表的限制和优点,但会像地图一样保留对。因此,您将使用标准算法来操作列表。您可能需要将特殊的函数或函子传递给具有此列表的算法,以取消对键或值的引用。
如果您只想在列表中搜索一个项目,而不关心效率,那么可以使用
|
8
0
@奥贝卡尔普有一个很好的答案。提高多指标指数是个好建议。 @是的 不 一个“非常愚蠢”的问题。 |
9
0
我也需要同样的东西,所以我写了一个列表和地图的组合。我称之为地图列表和哈希地图列表;。基本上,我将源代码转到xmap.h和xlist.h,并将两者结合起来,生成xmap_list.h。这个类的工作方式是将键存储在给定的映射中,但与指向包含该值的节点的指针配对。此节点包含一个指向映射的迭代器。节点保存在单独的链接列表中。以这种方式,您可以像在map类中一样使用find函数,但也可以按照插入元素的顺序迭代元素,如list类。您甚至可以像在列表中一样迭代键本身。我并没有实现所有最后的等价列表函数,但您使用最多的大多数函数都在那里(例如,虽然您可以自己轻松地添加这个函数,但我不处理自定义分配器)。它有点像带有find()函数的list<>。 对于我写这篇文章的项目,我最终改为boost::multi_index,但我仍然尽可能使用上面的map_list<gt;类,因为它更轻,更接近std::list<gt;接口。 我没有把代码上传到任何地方,但是如果我看到有人在这个答案中添加了评论,我会试着把它发布到某个地方,并在这里注明位置。 |
Julia · 矢量中相加为总和S的值的数量 1 年前 |
C_Rod · 在模板方法中确定STL容器中项目的数据类型 2 年前 |
quantumwell · 将空向量放入std::map() 6 年前 |
OutOfBound · 对未初始化内存使用算法的优点 6 年前 |
DarthRubik · 在使用列表删除之后,迭代器如何不无效 6 年前 |