我想在给定元素的下界之前找到set中没有元素,我想用指针运算和std :: set ::迭代器,因为他们的行为像指针,这里是我的尝试:如何统计std :: set中给定元素之前的元素数
set<int>q;
set<int>::iterator curr;
set<int>::iterator strt;
l = num.size();
q.insert(num[l-1]);
strt = q.begin();
temp = 1;
int x;
for(int i=l-2;i>=0;i--)
{
curr = q.lower_bound(num[i]);
if(curr == q.end())
stats.push_back({temp,0});
else
{
x = curr-strt;//ERROR
stats.push_back({x,temp-x});
}
q.insert(num[i]);
temp++;
}
是有什么办法找出一套没有任何元素的存在之前下界一个给定的元素吗?
这是一个'O(n)',是否有其他方法时间复杂度较低或者是否还有更适合的容器? – Sab
@Sab:根据你在做什么,排序的数组/矢量可能会更好。您可以使用'std :: lower_bound'等对数时间进行搜索,并在常量时间内查找迭代器距离。维护排序的顺序可能需要更多的工作。 –
@MikeSeymour重要的是要注意,“你将不得不遍历整个集合从开始到你发现的点”不是一般平衡树的属性,特别是STL树。您可能想在下面看到我的答案。 –