![]() |
1
37
|
![]() |
2
20
正如Matthieu在另一个回答中所说的 Boost.MultiIndex library
将生成以下输出:
|
![]() |
3
9
|
![]() |
4
5
我偶尔也会遇到同样的问题,以下是我的解决方案:
https://github.com/nlohmann/fifo_map
. 这是一个仅限页眉的C++11解决方案,可以作为
然后输出为
|
![]() |
5
4
除了尼尔的一个组合向量+映射的建议,如果你需要保持插入顺序和按关键字搜索的能力,你也可以考虑使用Boost多索引库,它提供了多个方法可寻址的容器。 |
![]() |
6
4
地图和集合旨在对数据施加严格的弱排序。Strick弱排序坚持认为没有条目是 equavalent (不同于平等)。
您需要提供映射/集合可用于执行的函子
函子如下所示:
如果您可以提供一个函数,告诉STL如何排序,那么映射和集合就可以执行您想要的操作。例如
red-black trees
您的底层数据将保持平衡——然而,您将得到大量的重新平衡,因为您的数据将基于增量排序(与随机排序相比)生成——在本例中
我经常使用这个策略——但是我从来没有将它放在经常运行的代码中。我在考虑 boost::bimap . |
![]() |
7
2
嗯,没有一个STL容器可以真正实现您的愿望,但是有很多可能性。 1.STL
默认情况下,使用
如果希望按字符串搜索,则始终具有
2.Boost.MultiIndex 它允许您创建一个存储容器,可通过各种样式的各种索引访问,所有这些都(几乎)神奇地为您维护。
而不是使用一个容器(
|
![]() |
8
1
使用向量。它可以让您完全控制订购。 |
![]() |
9
1
要保留所有时间复杂性约束,您需要map+list:
享受 |
![]() |
10
1
|
![]() |
11
0
我也认为地图不是一条好路。地图中的键形成一组;单个键只能出现一次。在地图中插入期间,地图必须搜索该键,以确保该键不存在或更新该键的值。对于这一点,重要的是(性能方面的)键以及条目具有某种排序。因此,具有插入顺序的映射在插入和检索条目时效率极低。 另一个问题是,如果使用同一个键两次;是否应保留第一个或最后一个条目,是否应更新插入顺序? 因此,我建议您使用Neils建议,一个用于插入时间排序的向量和一个用于基于键的搜索的映射。 |
![]() |
12
0
|
![]() |
13
0
分配看起来有点不同,但您的循环仍与现在完全相同。 |
![]() |
14
0
|
![]() |
15
0
为了做他们所做的事情并在这方面高效,地图使用哈希表和排序。因此,如果您愿意放弃插入顺序的内存,以获得按键查找的便利性和性能,则可以使用映射。 如果需要存储插入顺序,一种方法是创建一个新类型,将存储的值与存储顺序配对(需要编写代码来跟踪顺序)。然后,您将使用字符串映射到此新类型进行存储。使用键执行查找时,还可以检索插入顺序,然后根据插入顺序对值进行排序。 还有一件事:如果您正在使用一个映射,请注意这样一个事实:测试persons[“C”]是否存在(在您只插入了a和B之后),实际上会在映射中插入一个键值对。 |
|
16
0
在地图中插入时,使用地图和迭代器向量(保证映射迭代器不会失效) 在下面的代码中,我使用Set 向量::迭代器>vec; 无效打印非重复(){ 向量::迭代器>::迭代器向量器; for(vecIter=vec.begin();维克特=vec.end();vecIter++){ 库特<<(*vecIter)——>c_str()< void insertSet(字符串str){ ret=myset.insert(str); 向量向后推(返回第一); |
![]() |
17
0
``结构比较:公共二进制函数{ 布尔运算符()(int a,int b){返回真;} }; 使用此选项可按与输入相反的顺序获取地图的所有元素(即:第一个输入的元素将是最后一个,最后一个输入的元素将是第一个)。虽然不如同一订单好,但可能会给您带来一些不便。 |
![]() |
18
0
您可以使用带有向量的pair函数来代替map! 前任:
输出:
或另一个例子:
输出:
希望这可以帮助其他人在未来谁是寻找非排序的地图像我一样! |
![]() |
19
0
有 std::unordered_map 你可以去看看。从第一个角度看,它似乎可以解决您的问题。 |
![]() |
20
0
如果您不想使用Boost::multi_index,我在这里提供了一个概念验证类模板供您查看: 使用std::map和std::list,后者使用指针来维护顺序。
|
|
Julia · 矢量中相加为总和S的值的数量 1 年前 |
![]() |
C_Rod · 在模板方法中确定STL容器中项目的数据类型 2 年前 |
![]() |
quantumwell · 将空向量放入std::map() 6 年前 |
![]() |
OutOfBound · 对未初始化内存使用算法的优点 6 年前 |
![]() |
DarthRubik · 在使用列表删除之后,迭代器如何不无效 6 年前 |