给出容器中无法修改的对象列表 / *这是一张地图<>。排序顺序基于'name'* /
struct Obj {
// those and some other data is stored here
string name;
int key; // unique index
};
需要key
订购。 哪种方式更快?
我可以:
将它们插入到std :: 设置然后迭代以获取订单。
根据C ++标准,对std :: set中元素的迭代按std :: less或可选的比较谓词模板参数确定的排序顺序进行。
< / LI>或者将它们插入数组,std :: vector和排序。 (预期标准排序为O(n*log(n))
)
name
排序,这与key
索引值无关。对象数量可以是100到10000。
我认为使用方法1
会更快。即使下面的分析(如果正确)表明它们具有相同的O复杂度(n * log(n))。
Complexity将N个对象插入集合:
log(1)+log(2)+log(3)+....+log(n)
=log(n!)
=O(n*log(n)-n + O(log(n)))
=O(n*log(n))
答案 0 :(得分:0)
根据我的经验,您问题的最佳解决方案是:
vector<set<Obj>::const_iterator> vec;
vec.reserve(set_of_obj.size());
insert into vector;
sort the vector using a custom comparator.
一些解释: