如何在std :: set中的给定元素之前计算元素数量

时间:2015-05-25 15:15:18

标签: c++ stdset

我想在给定元素的下限之前找不到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中的元素?

2 个答案:

答案 0 :(得分:1)

您必须从头开始迭代到您已经发现的点数来计算元素的数量。对此有一个library function

x = std::distance(strt, curr);

curr-strt之类的算术仅为随机访问迭代器定义,其中计算可以在恒定时间内完成。像distance这样的函数适用于更通用的迭代器类型,但如果迭代器不直接支持该运算符,则可能会很慢。

答案 1 :(得分:1)

使用data structure augmentation,可以在对数时间内执行动态订单统计。

我曾经libstdc++ extension for this写过一次,后来又疯了python version