2012-04-20 73 views
1

Qt提供了一组STLcontainers.Qt容器 - 我应该选择哪种容器?

然而,没有容器可用,哪些商店有序值由它们的顺序(如std::setQSet因为某些原因行为就像std::unordered_set。我意识到,在调用“set”数据结构中查找可能是一件好事,但我当然不明白为什么做出这个决定。

我应该使用哪种容器来存储有序项集合(我怀疑QMap与虚构值是一个非常糟糕的选择)为什么不Qt提供类似std::set

我猜这背后可能有一些技术原因,但不幸的是,我想不出一个。

+8

如果你想要'std :: set',为什么不使用...'std:set'? – 2012-04-20 18:40:26

+0

你可以使用'std :: set',Qt的容器并不是为了完全反映C++标准库(注意缺少多重集或单向转发链表),你可以使用C++容器来存储Qt对象。 – birryree 2012-04-20 18:42:40

+0

@birryree嗯,我不想在一个项目中混合使用'STL'和'Qt'容器。它们有不同的实现细节(例如写入时拷贝)和'Qt'容器实际上试图*镜像*'STL'。他们甚至包括'STL'类接口('push_back'和'append')来提供这种兼容性。 – 2012-04-20 18:45:44

回答

3

维基百科:

Haavard Nord和的Eirik Chambe-ENG(Qt的原开发者和CEO兼总裁,分别奇趣)于1991年

开始 “的Qt” 的发展

同样来自维基百科,关于STL:

贝尔实验室的安德鲁·柯尼希还没有意识到的工作,并要求在斯捷潘诺夫的1993年11月会议上提出的主要思路用于C++标准化的ANSI/ISO委员会。该委员会的回应非常有利,并导致Koenig及时提出要求在1994年3月会议上提出正式提案。尽管面临巨大的时间压力,Alex和Meng能够提出一份在该次会议上获得初步批准的提案。

而且从自己的男人:

“正如我经常说,我认为不送货较大的标准库我最大的错误。” --Bjarne Stroustrup

Qt独立开发。所以就这样了。使用QMap并继续你的生活。 :)

(注:有Qt中无序的地图,这就是所谓的QHash

如果你不能想到的有用或有趣的投入在价值插槽的东西,那么你的程序可能是没有足够的复杂程度来做文章。您的关键对象中是否有数据成员可以轻松地在地图中创建值?你真的不会想到要放在那里的东西吗?

如果实际上每个条目都浪费了一个字符,那么这是否是系统中真正的瓶颈?你有指标证明这一点?等等。

+2

顺便说一句,从其他我使用pre-STL的类库中,“set”这个词与“unordered”是同义词,并且一般通过调整散列表的大小来实现。所以我很惊讶地发现'std :: set'有顺序。 (如果有什么我会期望它是无序的,并有一个名为'std :: ordered_set'的“异常”类,而不是相反!) – HostileFork 2012-04-29 14:32:12