我想在给定元素的下限之前找不到set中的元素,我想到使用std :: set :: iterators的指针算法,因为它们的行为类似于指针,这是我尝试过的:
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++;
}
是否有任何方法在给定元素的下限之前找不到set中的元素?
答案 0 :(得分:1)
您必须从头开始迭代到您已经发现的点数来计算元素的数量。对此有一个library function:
x = std::distance(strt, curr);
curr-strt
之类的算术仅为随机访问迭代器定义,其中计算可以在恒定时间内完成。像distance
这样的函数适用于更通用的迭代器类型,但如果迭代器不直接支持该运算符,则可能会很慢。
答案 1 :(得分:1)
使用data structure augmentation,可以在对数时间内执行动态订单统计。
我曾经libstdc++ extension for this写过一次,后来又疯了python version。