我需要一个容器(不一定是STL容器),它让我轻松地执行以下操作:
我使用了std :: list,但它不会让我插入任何位置(确实如此,但为此我必须迭代所有元素然后插入我想要的位置,这很慢,作为列表可能很大).你能推荐任何有效的解决方案吗?
我正在寻找具有恒定时间的标准容器(如果存在):
我可以自己编程,但为什么它可能已经存在std呢?为什么呢?
为什么我们应该使用"多组"(因为我们知道"多组"可以保持重复键)
为什么我们不应该使用向量?
我们在向量中没有"多组"中有什么好的功能吗?(或其他容器,如矢量)
你知道"多套装"的特殊用法吗?
首先,这是一个游戏项目.
我需要有一个名为Skill的对象,它包含它们的字符串名称,一些其他成员,以及一组名为"requirements"的其他Skill对象.(这将是给定技能要求的先决条件技能列表)
在什么样的STL容器中我应该放置一组所有Skill对象?向量?组?地图?
这个容器是否也被用作成员"要求"的类型?
技能必须是独一无二的.
至于我将对技能组合做什么 - 通过名称搜索,主要是结合技能组合,并将技能附加到组合中.
这是我经常遇到的编程问题,并且想知道是否存在数据结构,无论是在C++ STL中还是我自己实现的,都提供随机和顺序访问.
我可能需要这个的一个例子:
假设有n种类型的项目(例如,n = 1000000),并且每种类型的项目都有固定数量(例如,0或10)
我将这些项存储到一个数组中,其中数组索引表示项的类型,值表示该给定类型的项数是多少
现在,我有一个迭代所有现有项目的算法.为了获得这些项目,当所有条目都为0时迭代整个数组是非常浪费的,除了数组[99999]和数组[999999].
通常,我通过使用链表来解决这个问题,该链表保存了所有非零数组条目的索引.我以这种方式实现标准操作:
Insert(int t):
1)如果Array [t] == 0,LinkedList.push_back(t);
2)数组[t] ++;
删除(int t):
1)如果Array [t] == 1,从LinkedList中查找并删除t;
2)数组[t] - ;
如果我想要删除操作的O(1)复杂性,我使数组存储容器而不是整数.每个容器都包含一个整数和指向LinkedList各自元素的指针,因此我不必搜索列表.
我想知道是否有一个数据结构正式化/改进了这种方法,或者是否有一种更好的方法来完成这项工作.
我目前正在学习有关STL中的地图的信息。我想知道如何从地图上获取特定的键值对。例如,下面地图中的第三个键值对。'C'-> 1
'A'-> 1
'B'-> 1
'C'-> 1
'D'-> 1
'E'-> 2
Run Code Online (Sandbox Code Playgroud) 如果我们拥有std::set并且std::vector可以动态增长和缩小,为什么我们需要链表?
NB我真的不明白,为什么会有这么多的选票.唐氏选民,请留下评论.
c++ ×7
containers ×4
stl ×4
arrays ×1
c ×1
dictionary ×1
dynamic ×1
iterator ×1
linked-list ×1
list ×1
multiset ×1
set ×1
std ×1
vector ×1